安全地降低 PID_MAX

安全地降低 PID_MAX

我集群中有一台服务器遇到了进程表泄漏。由于负责代码的开发人员几天都没空,我按如下方式增加了机器上的 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

相关内容