Fork失败,“资源暂时不可用”。哪个资源?

时间:2017-05-20 02:20:19

标签: perl fork ulimit

我继承了一个Perl脚本,根据计算机配置,在使用fork调用$? == 11期间失败。

根据errno.hvarious posts,11是EAGAIN,即“再试一次”,因为某些资源暂时无法使用。

有没有办法确定哪个资源导致fork失败, 除了逐个增加各种系统限制 (open file descriptorsswap space,或 allowable threads)的数量?

2 个答案:

答案 0 :(得分:2)

假设您的意思是$!EAGAIN,我系统上的fork手册页说:

  

EAGAIN:fork()无法分配足够的内存来复制父页面表并为子节点分配任务结构。

     

EAGAIN:由于遇到调用方的RLIMIT_NPROC资源限制,因此无法创建新进程。要超过此限制,进程必须具有CAP_SYS_ADMIN或CAP_SYS_RESOURCE功能。

您是否正在尝试创建大量流程?你这些孩子完成后会收割它们吗?

答案 1 :(得分:0)

该错误是由于用户的可用堆栈用完了。 检查RHEL服务器上的安全配置文件 [root@server1 webapps]# cat /etc/security/limits.d/90-nproc.conf

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

* soft nproc 1024

root soft nproc unlimited

[root@server1 webapps]# vi /etc/security/limits.d/90-nproc.conf

[root@server1 webapps]#

在我的情况下,“测试”用户收到消息“ -bash:fork:重试:资源暂时不可用”

通过添加用户特定的堆栈限制来解决此问题

[root@server1 webapps]# vi/etc/security/limits.d/90-nproc.conf

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

* soft nproc 1024

test soft nproc 16384

root soft nproc unlimited

[root@server1 webapps]#