本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文为您介绍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),引发报错。
解决方案
调整系统用户可创建的最大线程数
系统日志中查看所有进程创建失败的应用。
执行以下命令,强制关闭占用线程数较多的应用。
警告kill
命令属于风险操作,建议在执行前为ECS实例创建快照或备份重要文件,以确保数据安全。<PID>
需替换为占用线程数较多的进程PID。kill -9 <PID>
执行以下命令,调整系统用户可创建的最大线程数。
<$Num_Of_Process>
替换为调整后的最大线程值,根据实际需求合理规划ulimit
资源。ulimit -u <$Num_Of_Process>
调整某个进程的limit资源
(可选)若未安装
util-linux
工具,请执行以下命令安装。sudo yum install -y util-linux
执行以下命令,调整进程的
limit
资源。<$PID>
需替换为进程或线程创建失败的进程PID。prlimit --pid <$PID> --nproc=unlimited
该文章对您有帮助吗?