全部產品
Search
文件中心

:在Linux系統內啟動某個服務時提示task: Cannot allocate memory該如何處理?

更新時間:Jul 04, 2024

問題現象

在ECS執行個體中啟動某個服務進程時,系統提示task: Cannot allocate memory錯誤,如下圖所示。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。
  1. 遠端連線ECS執行個體。
    具體操作,請參見串連方式概述
  2. 執行以下命令,查看系統當前已啟動並執行進程數是否大於最大進程數。
    • 查看系統當前已啟動並執行進程數。
      ps -eLf | wc -l
    • 查看系統的最大進程數。
      sysctl kernel.pid_max

    如果系統已啟動並執行進程數大於最大進程數,請繼續執行步驟3

  3. 將命令中的XXXX修改為期望值,來調高kernel.pid_max的值。
    • 執行以下任意一條命令,臨時設定(重啟執行個體後會失效,需要重新設定)
      • sysctl -w kernel.pid_max=XXXX
      • echo XXXX> /proc/sys/kernel/pid_max
    • 永久設定(不受執行個體狀態影響,一直有效)
      echo "kernel.pid_max=XXXX" >> /etc/sysctl.conf
      sysctl -p
    調高後,系統立即生效。