1. 程式人生 > >pid max導致fork: Cannot allocate memory 的分析及解決辦法

pid max導致fork: Cannot allocate memory 的分析及解決辦法

事情起因是有臺生產環境的伺服器down了,ssh連線不上去。就在大家準備去機房檢查該機器的時候,突然又可以ssh登入了。但是隻有一個同事成功登入,其他人依然無法連線。在成功登入的同事終端上執行任何命令,都會報如下錯誤:
# 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、我主要研究一種情況:記憶體中較大物件很長一段時間內不能被釋放。這方面並不完全算作記憶體溢位,物件會在某一時間點上被