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

问题描述 投票:2回答:2

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

根据errno.hvarious posts,11为EAGAIN,即“重试”,因为某些资源暂时不可用。

是否有办法确定哪个资源导致派生失败,除了一对一地增加各种系统限制(open file descriptorsswap space,或allowable threads的数量)?

perl fork ulimit
2个回答
3
投票

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

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

EAGAIN:无法创建新进程,因为遇到了调用者的RLIMIT_NPROC资源限制。要超出此限制,该进程必须具有CAP_SYS_ADMIN或CAP_SYS_RESOURCE功能。

您是否要创建大量流程?完成后您正在收养孩子吗?


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]#

© www.soinside.com 2019 - 2024. All rights reserved.