![安全地降低 PID_MAX](https://linux22.com/image/647058/%E5%AE%89%E5%85%A8%E5%9C%B0%E9%99%8D%E4%BD%8E%20PID_MAX.png)
我集群中有一台服务器遇到了进程表泄漏。由于负责代码的开发人员几天都没空,我按如下方式增加了机器上的 pid_max:
echo 4194303 > /proc/sys/kernel/pid_max
这为我们赢得了时间,直到开发人员能够修复他的应用程序并阻止泄漏。
但是,我现在想让服务器与集群中的其他服务器重新保持一致。我担心的是有些进程的 pid 在 300 万范围内。如果我将 pid_max 降低到正常值,那么表中已有的 pid 会发生什么情况?系统是否需要重新启动?
答案1
什么也不会发生。
我希望我可以说服务器会爆炸或者至少着火,但是没有......
随着 PID 的循环,它们将落入定义的范围。您确实应该重新启动并使新设置在 sysctl.conf 中持久化。但除了填充/字段问题外,拥有更大范围的 PID 可能没有什么坏处。
答案2
为了减少pid_max
你需要确保你的系统运行进程较少pid_max
ps -efL # L in ps list the threads, thread in linux has a pid as normal process
我在我的 Linux 工作站上使用过它:
ps -efL | wc -l
307
sysctl -a | grep pid_max
kernel.pid_max = 32768
sysctl kernel.pid_max=2000
kernel.pid_max = 2000
sysctl -a | grep pid_max
kernel.pid_max = 2000
echo $((2000-307))
1693 ## there is pids available for new "procs|threads" ## after pid_max reduce