-bash: fork: retry: Resource temporarily unavailable

同事反映:Linux上启动tomcat后,测试几分钟就报错,这时登录主机报如下错误:
-bash: fork: retry: Resource temporarily unavailable

这个问题很常见,很有可能是操作系统资源限制导致的。由于这套程序已经在相同配置的其它服务器上运行
有几年了。由于是功能测试,并且程序没有改动过,基本上排除了程序的bug导致。

首先用root用户kill掉java进程。这时用普通用户就可以正常登录Linux了。
ulimit -a 检查系统参数,并经同事确认,这些设置也都正常。
ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 22948
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 10240
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

 

于是同事继续查找问题的根本原因,经多次测试没找到原因,同事再次寻求帮助。

让同事重现一下错误:
1.登录系统,启动tomcat,客户端开始模拟调用程序。几分钟后系统便无法登录。

检查同事启动的脚本,发现启动其中的一个java程序时用到了sudo命令,问其原因,是因为需要程序中
要监听网卡的信息,所以需要用root的身份启动。

这时突然想到了问题的原因,会不会是root用户对系统资源的使用有限制。


ulimit -a 一看,果然是默认配置。

在/etc/security/limits.conf 中添加如下信息后,重启应用,问题解决。

root soft nproc 8192
root hard nproc 16384
root soft nofile 10240
root hard nofile 65536
root soft stack 10240

 

你可能感兴趣的:(-bash: fork: retry: Resource temporarily unavailable)