Linux调整pid max参数

故障现象

服务器没法SSH,VNC操做命令提示:sshd[4545]: error: fork: cannot allocate memorypython

故障缘由

当前环境有过多的进程,超过用户进程最大限制数后,可能会致使这个报错。 此时系统上内存资源可能还很充足。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

参考文档

相关文章
相关标签/搜索