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