服务器没法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