Linux Error:-bash: fork: retry: Resource temporarily unavailable
今天遇到了这么一个错误,如题所示。
具体的表现如下;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[root@LINUX ~]# su - web -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: Resource temporarily unavailable -bash-4.1$ exit logout -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: Resource temporarily unavailable -bash-4.1$ -bash-4.1$ quit -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable ^C-bash: fork: Resource temporarily unavailable -bash-4.1$ -bash-4.1$ exit logout [root@LINUX ~]# |
可以看到,当登录某个用户的时候,Linux显示错误信息:
-bash: fork: retry: Resource temporarily unavailable
也许看到这样的信息,开始,你会怀疑是web用户的环境变量有问题。
然而并不是这样。
导致这个问题的原因是用户达到了可用最大进程句柄的上限。
当前的用户web,开启的进程数:
1 2 3 |
[root@LINUX ~]# lsof -u web 2>/dev/null | wc -l 1332 [root@LINUX ~]# |
而默认作用的大小:
1 2 3 4 5 6 7 8 |
[root@LINUX ~]# 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@LINUX ~]# |
解决方法:
可以修改:
/etc/security/limits.d/90-nproc.conf
或者
/etc/security/limits.conf
都是可以达到目的的:
limits.conf:
1 2 3 4 |
web soft nproc 1333 web hard nproc 1333 web soft nofile 10240 web hard nofile 10240 |
90-proc.conf:
1 2 |
web soft nproc 1333 web hard nproc 1333 |
只要配置的数目比当前已用数目(上面lsof查看到的值)大,即可解决该问题,… 至于具体设置多少合适,要看具体的情况设定适宜的值。
查看某个用户的ulimits全局设定:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@LINUX ~]# su - web [web@LINUX ~]$ [web@LINUX ~]$ 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) 62794 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) 1333 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited [web@LINUX ~]$ |
其中“max user processes”就是nproc设定的对象。
——————————————————
Done。