本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
本文為您介紹Alibaba Cloud Linux 2系統的ECS實例創建大量進程失敗的原因及解決方案。
問題描述
Alibaba Cloud Linux 2系統的ECS實例中執行系統調用(fork/clone)時,進程創建失敗,返回“-1 EAGAIN (Resource temporarily unavailable)
”錯誤。一般有如下兩種場景:
場景一:通過Shell命令交互時,系統返回“
bash: fork: retry: No child processes
”錯誤。場景二:部分應用內創建進程或者線程失敗,同時在系統的其他應用中卻可以創建成功。
問題原因
不同的場景,問題原因不同,請根據現場實際情況匹配對應的場景:
場景一:系統用戶創建的線程數達到最大值。通過
ulimit -u
命令可查看線程最大值。場景二:部分應用的運行用戶所創建的進程數(nr_user_process)大于應用的進程數限制(app_limit),引發報錯。
解決方案
調整系統用戶可創建的最大線程數
切換到root用戶,查看進程創建失敗用戶的所有應用。
通過
kill
命令強制關閉占用線程數較多的應用。警告kill
命令屬于風險操作,確保操作前為ECS實例創建快照或者備份重要文件,確保數據安全。調整系統用戶可創建的最大線程數。
ulimit -u <$Num_Of_Process>
說明<$Num_Of_Process>指調整后的最大線程值,建議您合理規劃ulimit資源。
調整某個進程的limit資源
安裝util-linux工具。
yum install -y util-linux
說明如果已安裝該工具,可跳過本步驟。
調整進程的limit資源。
prlimit --pid <$PID> --nproc=unlimited
說明<$PID>指進程或線程創建失敗的進程PID。
文檔內容是否對您有幫助?