在排定每日執行兩次的 Shell Script 中,執行到一半就自行中斷了。手動執行時產生 “Fork: Cannot allocate memory” 錯誤訊息 ,檢查記憶體沒有不足的現象,判定不可能是記憶體不足產生的。在使用 Google 大神後把問題鎖定在執行中的Linux 環境中有過多程序,超過 Pid max 限制後執行程序無法被正常執行。
查看設定值
方法一:
cat /proc/sys/kernel/pid_max
方法二:
#sysctl kernel.pid_max
kernel.pid_max = 32768
解決方案
在確認目前的進程數量限制值,透過下列指令暫時修改參數值來恢復系統正常及確認問題點。
echo 1000000 > /proc/sys/kernel/pid_max
在確認修改後可以正常執行,使用下列指令來永久修改。
echo "kernel.pid_max=10000000 " >> /etc/sysctl.conf
sysctl -p
註記:
64位系統上pid_max最大值為2^22,32位系統上最大值為32768。