pid max導致fork: Cannot allocate memory 的分析及解決辦法
# free
-bash: fork: Cannot allocate memory
這就很尷尬了:啥都沒法調查。
後來多試驗幾次,偶爾能執行成功:
# free
total used free shared buff/cache available
Mem: 7814784 340028 6688016 9488 786740 7244604
Swap: 2097148 0 2097148
可以看出memory還有很多,不可能是記憶體耗盡問題。
當時想不通是啥情況。 今天查詢資料無意中發現:當環境中有過多process,超過pid max可能會導致這個報錯。
於是試驗了下:
1. 查詢pid_max值並修改(原來值挺大,為了測試改小點)
# sysctl kernel.pid_max kernel.pid_max = 32768 # sysctl -w kernel.pid_max=500 kernel.pid_max = 500
2. 測試
# cat test.c
#include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函式返回的值 int count=0; while(1) { fpid=fork(); if (fpid < 0) { printf("error in fork!\n"); break; } else if (fpid == 0) { count++; } else { sleep(100); return 0; } } printf("count is %d\n", count); return 0; }
編譯後執行
# gcc test.c; ./a.out
error in fork!
count is 172
3. 此時再用其他終端試圖ssh該測試環境,發現無法登入。
4. 在其他已經連線該測試環境的終端(執行a.out之前就連線好)試圖執行free或者其他命令,結果報錯-bash: fork: Cannot allocate memory
至此可以初步得出結論:確實pid max用盡會導致fork問題。
解決辦法就是修改pid max
上文提到的sysctl -w 修改只是臨時修改,重啟後會丟失。
永久修改方法:
# echo "kernel.pid_max=99999" >> /etc/sysctl.conf
# sysctl -p
P.S.
64位系統上pid_max最大值為2^22,32位系統上最大值為32768
相關推薦
pid max導致fork: Cannot allocate memory 的分析及解決辦法
事情起因是有臺生產環境的伺服器down了,ssh連線不上去。就在大家準備去機房檢查該機器的時候,突然又可以ssh登入了。但是隻有一個同事成功登入,其他人依然無法連線。在成功登入的同事終端上執行任何命令
pid max導致fork: Cannot allocate memory 的處理
ima oss 系統 bbf 海外 遊戲 控制臺 處理 not 海外一臺服務器淩晨就開始出現了不能登錄遊戲。早上運營人員告知上服務器查看了下。 一打命令就界面提示 -bash: fork: Cannot allocate memory 輸入了幾次top 出來了才出來了,一看
-bash: fork: Cannot allocate memory
今天遇到伺服器無法SSH,VNC操作命令提示fork:cannot allocate memory free檢視記憶體還有(注意,命令可能要多敲幾次才會出來) 檢視最大程序數 sysctl kernel.pid_max ps -eLf | wc -l檢視程
-bash: fork: Cannot allocate memory 問題的處理
今天遇到伺服器無法SSH,VNC操作命令提示fork:cannot allocate memory free檢視記憶體還有(注意,命令可能要多敲幾次才會出來) 檢視最大程序數 sysctl kernel.pid_max ps -eLf |
Redis報錯Can't save in background: fork: Cannot allocate memory及類似問題的處理方法
問題的發現及解決過程: 1.Redis主從複製(一主一從)環境在客戶端用命令檢視主從狀態 在slave上輸入命令顯示如下: 在master上輸入命令顯示如下: 從顯示可以看出主從關係出現問題,然後檢視slave的redis.log有如下報錯: 以為是IP及埠問題,經檢查後發現
-bash: fork: Cannot allocate memory問題,程序數滿了的解決辦法
今天一大早來到公司就發現一臺遠端伺服器的程序滿了,無法連線上遠端伺服器,如下圖所示: 出現這種情況,主要是因為程序跑滿了,memory被消耗光了,無法為其他的操作,包括vnc操作命令和SSH連線分配記憶體,我們可以用兩個辦法: 1、init 6(重啟伺服器,注意,不是重啟tomcat)
解決redis Can't save in background: fork: Cannot allocate memory
前面啟動Redis時,看到如下警告: [1958] 13 Aug 16:18:24 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
redis Can’t save in background: fork: Cannot allocate memory 解決及原理
java日誌中報錯 redis.clients.jedis.exceptions.JedisDataException: MISCONF Redis is configured to save RD
fork: Cannot allocate memory 問題的處理
free檢視記憶體 檢視最大程序數 sysctl kernel.pid_max ps -eLf | wc -l檢視程序數 確認是程序數滿了 修改最大程序數後系統恢復 echo 1000000 > /proc/sys/kernel/pid_max 永
記一次Dubbo導致的記憶體洩漏過程分析及解決
近日測試團隊反饋版本機測試環境請求經常卡頓,十分緩慢,甚至有超時的情況,但是請求返回、業務邏輯均是正常的,因此進行了一番排查。 首先檢視應用日誌,及控制檯監控,應用均表現無異常,由於版本
轉載:oracle執行update語句時卡住問題分析及解決辦法
oracle執行update語句時卡住問題分析及解決辦法 這篇文章主要介紹了oracle執行update語句時卡住問題分析及解決辦法,涉及記錄鎖等相關知識,具有一定參考價值,需要的朋友可以瞭解。 問題 開發的時候debug到一條update的sql語句時程式就不動了,然後我就
SSH框架整合整合mongodb時候遇到的各種錯誤分析及解決辦法
一、首先要注意的就是整合mongodb 由於SSH框架大部分是老專案,使用的Spring框架都是低版本的,低版本的spring不支撐mongodb,因此,在整合之前就是要先升級專案中的Spring框架,我的Spring是1.0的,乘著這次機會我把它升級到4.2版
struts2 漏洞分析 及解決辦法
1.討論關於struts 安全問題。 2.黑客文化。 3.如何降低安全漏洞的出現。 4.忠告建議。 題記: 這篇文章本來很早應該和大家見面的,中間由於個人原因調整了系列文章釋出時間,實屬罪過。為了不誤導大眾文章中間講述的經歷想法實戰,均屬個人看法個人行為不代表任
系統頻繁Full gc問題分析及解決辦法
一、場景描述 上週開始系統在業務高峰期一直收到Full gc報警,監控顯示fgc頻繁,下圖是監控圖,左邊紅框是優化前效果,右邊是優化後,優化後fgc基本為0 二、原因查詢 1.檢視gc日誌,發現old區fgc後大小沒有變化,如下圖: 2.去線上dump記憶體看是什麼物件,用memory analyze
關於COM類工廠80070005和8000401a錯誤分析及解決辦法(DCOM)
關於COM類工廠80070005和8000401a錯誤分析及解決辦法 問題描述:最近做一個web應用程式需要操作Excel檔案,在開發環境下程式測試正常,部署到IIS後程序操作Excel檔案,IIS報錯,錯誤出現在建立Excel程序的語句,如下: Application
LCD驅動除錯中部分常見問題的分析及解決辦法
點選開啟連結 http://blog.csdn.net/colorant/article/details/2782568 LCD點不亮——無法正確完成初始化: LCD點不亮問題的原因有很多,但出現這個問題後,首先應該判斷LCD是否正確完成初始化。最簡單
mysql常見錯誤及分析及解決辦法
1、Can't connect to MySQL server on 'localhost'(10061)? 翻譯:不能連線到localhost 上的mysql?分析:這說明“localhost”計算機是存在的,但在這臺機器上卻沒提供MySQL服務。?需要啟動這臺機器上的MySQL服務,如果機子負載太高沒空
Java Web開發中,自定義過濾器被執行兩次的原因分析及解決辦法
本文出處:http://blog.csdn.net/chaijunkun/article/details/7646338,轉載請註明。由於本人不定期會整理相關博文,會對相應內容作出完善。因此強烈建議在原始出處檢視此文。 在Java Web開發過程中,我們可以使用過濾器和Sp
採用DoGet方式提交中文,亂碼產生原因分析及解決辦法
前段時間某功能在測試機器上出現亂碼,情況如下: 現象: 除錯搜尋功能時,通過doGet方法提交到後臺的中文引數在本地和開發測試機器上為亂碼(Action層),在測試人員測試機器上為中文.(Action層) 推斷: 懷疑是兩臺機器(開發人員測試機器,測試人員測試機器)環境不同: 1.
有關Android Handler記憶體洩漏分析及解決辦法
1、Android的開發工具是java,這能幫助我們解決很底層的問題 包括:記憶體管理,平臺依賴。然而,有時候專案依然會報OOM錯誤,so垃圾收集器在哪? 2、我主要研究一種情況:記憶體中較大物件很長一段時間內不能被釋放。這方面並不完全算作記憶體溢位,物件會在某一時間點上被