本文为您介绍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。