Alibaba Cloud Linux 2系统的ECS实例创建大量进程后进程最终创建失败的解决方法

作者阿里云代理 文章分类 分类:新闻快递 阅读次数 已被围观 963

点击查看原图

问题描述

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),引发报错。

解决方案

阿里云提醒您:

如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

临时解决方案

不同的场景,解决方案不同,请根据现场实际情况匹配对应的场景。

•场景一:参考如下步骤,调整系统用户可创建的最大线程数。

i.切换到root用户,查看进程创建失败用户的所有应用。

ii.通过kill命令强制关闭占用线程数较多的应用。

iii.参考如下命令,调整系统用户可创建的最大线程数。

警告:kill命令属于风险操作,确保操作前为ECS实例创建快照或者备份重要文件,确保数据安全。

ulimit -u [$Num_Of_Process]

说明:[$Num_Of_Process]指调整后的最大线程值。

•场景二:参考如下步骤,调整某个进程的limit资源。

i.参考如下命令,安装util-linux工具。

yum install -y util-linux

说明:如果已安装该工具,可跳过本步骤。

ii.参考如下命令,调整进程的limit资源。

prlimit --pid [$PID] --nproc=unlimited

说明:[$PID]指进程或线程创建失败的进程PID。

固化解决方案

建议管理员合理规划ulimit资源。关于如何规划该资源,请参见How to set ulimit values。

适用于

•云服务器ECS

如果您有其他问题,可以联系北京志远天辰阿里云代理商,为您提供一对一专业全面的技术服务,同时新/老阿里云会员,均可享受我公司代理商价格迎咨询

本公司销售:阿里云新/老客户,只要购买阿里云,即可享受折上折优惠!>

我有话说: