为什么要监控kernel.pid_max呢?以下这个案例来解答这个问题

有台生产环境的服务器down了,ssh连接不上去。就在准备去重启该机器的时候,突然又可以ssh登录了。但是只有一个同事成功登录,其他人依然无法连接。在成功登录的同事终端上执行任何命令,都会报如下错误:# free-bash: fork: Cannot allocate memory

后来多试验几次,偶尔能执行成功:

# freetotal used free shared buff/cache availableMem: 7814784 340028 6688016 9488 786740 7244604Swap: 2097148 0 2097148

可以看出memory还有很多,不可能是内存耗尽问题。

当时想不通是啥情况。 今天查询资料无意中发现:当环境中有过多process,超过pid max可能会导致这个报错。

1.  查询pid_max值并修改(原来值挺大,为了测试改小点)

# sysctl -w kernel.pid_max=500

kernel.pid_max = 500

64位系统上pid_max最大值为2^22,32位系统上最大值为32768

优化系统参数也只能临时解决一些问题,实际生产中开发和测试环境的机器会被很多开发和人员使用,会出现一些linux系统瓶颈问题。这个时候靠优化一些系统参数并不能解决问题,但是我们可以使用监控来提前发现可能出现的问题,然后提前登录机器释放出来一些资源使服务能够平稳运行

具体的监控步骤如下:

1、创建应用集:

再已有的模板中创建一个应用集《PID使用率》

 

2、创建监控项:

为了方便理解把kernel.pid_max的监控项拆分成了三个监控项《PID最多可用数量,PID当前已使用数量,PID当前使用率百分比》,为了方便管理将三个监控项都关联到应用集《PID使用率》 

 

 3:创建触发器:

查看原文