Linux

安全地降低 PID_MAX

  • December 1, 2014

我在集群中有一台伺服器正在經歷程序表洩漏。因為這幾天負責程式碼的開發者不可用,所以我在機器上增加了pid_max,如下:

echo 4194303 > /proc/sys/kernel/pid_max

這為我們贏得了時間,直到開發人員能夠修復他的應用程序並阻止洩漏。

但是,我現在想讓伺服器與集群中的其他伺服器重新內聯。我擔心的是 pids 在 300 萬範圍內的程序。如果我將 pid_max 降低到正常值,表中已經存在的 pid 會發生什麼情況?系統需要重啟嗎?

什麼都不會發生。

希望我可以說伺服器會爆炸或至少會著火,但不…

隨著 PID 的回收,它們將落入定義的範圍內。您應該真正重新啟動並使新設置在 sysctl.conf 中保持不變。但除了填充/欄位問題之外,擁有更大範圍的可用 PID 可能沒有害處。

為了減少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

引用自:https://serverfault.com/questions/648287