Linux
安全地降低 PID_MAX
我在集群中有一台伺服器正在經歷程序表洩漏。因為這幾天負責程式碼的開發者不可用,所以我在機器上增加了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