服務器沒法SSH,VNC操做命令提示:sshd[4545]: error: fork: cannot allocate memory
python
當前環境有過多的進程,超過用戶進程最大限制數後,可能會致使這個報錯。 此時系統上內存資源可能還很充足。bash
(1)首先,使用pstree
命令,查詢用戶進程及子進程服務器
sudo pstree -p | wc -l
也能夠使用ps
命令直接查看進程數:ssh
sudo ps -eLf |wc -l
(2)查看root和普通帳戶進程數限制ide
# 普通帳戶下 $ ulimit -a ... max user processes (-u) 1024 ... # root帳戶下 # ulimit -a ... max user processes (-u) 6553 ...
咱們能夠看出普通用戶最大進程數爲1024,root用戶的最大進程數爲6553。函數
(3)更改pid max參數值測試
# 臨時更改 sysctl -w kernel.pid_max=65535 或 echo 65535 > /proc/sys/kernel/pid_max # 永久更改 echo "kernel.pid_max=65535" >> /etc/sysctl.conf sysctl -p
(4)查看當前系統進程數阿里雲
cat /proc/sys/kernel/pid_max ulimit -a sysctl kernel.pid_max
(1)64位系統上pid_max最大值爲2^22,32位系統上最大值爲32768;.net
(2)一個測試進程數代碼:code
# 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