問題現象
在ECS執行個體中啟動某個服務進程時,系統提示
task: Cannot allocate memory錯誤,如下圖所示。
可能原因
可能是系統進程數超限導致。
Linux核心通過核心配置參數
kernel.pid_max限制進程的數量,當啟動並執行服務的總進程數超出kernel.pid_max的值時,再建立新進程時系統會報錯task: Cannot allocate memory。說明 當系統當前已啟動並執行進程數超過最大進程數(
kernel.pid_max)的三分之二時,建議您立即調高kernel.pid_max的值,避免影響後續的業務運行。解決方案
您可以參考以下步驟,根據實際需要調高
kernel.pid_max的值(即允許系統運行更多的進程數)。說明 64位系統允許設定的
kernel.pid_max最大值為222,32位系統允許設定的kernel.pid_max最大值為32,768。- 遠端連線ECS執行個體。具體操作,請參見串連方式概述。
- 執行以下命令,查看系統當前已啟動並執行進程數是否大於最大進程數。
- 查看系統當前已啟動並執行進程數。
ps -eLf | wc -l - 查看系統的最大進程數。
sysctl kernel.pid_max
如果系統已啟動並執行進程數大於最大進程數,請繼續執行步驟3。
- 查看系統當前已啟動並執行進程數。
- 將命令中的
XXXX修改為期望值,來調高kernel.pid_max的值。- 執行以下任意一條命令,臨時設定(重啟執行個體後會失效,需要重新設定)
sysctl -w kernel.pid_max=XXXXecho XXXX> /proc/sys/kernel/pid_max
- 永久設定(不受執行個體狀態影響,一直有效)
echo "kernel.pid_max=XXXX" >> /etc/sysctl.conf sysctl -p
調高後,系統立即生效。 - 執行以下任意一條命令,臨時設定(重啟執行個體後會失效,需要重新設定)