歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> -sh: fork failed – too many processes

-sh: fork failed – too many processes

日期:2017/2/27 15:46:33   编辑:Linux教程

《OneinStack》安裝 JAVA環境,跑一段時間,卻換一般用戶(www)部署代碼時候,提示報錯信息:-sh: fork failed – too many processes或者su: cannot set user id: Resource temporarily unavailable,明顯是系統資源受限制。

排查問題過程如下:

1. 關閉www下所有應用

為了安全JAVA應用跑在一般用戶(www),由於報錯,切換www用戶,提示系統資源限制,於是關閉www用戶下所有應用,使能切換到www用戶下,方便排除問題。

2. 查看www用戶配置文件ulimit參數

[root@OneinStack ~]# su - www
[www@OneinStack ~]$ 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) 256345
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
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) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

從上面可以看出,系統默認max user processes為1024,顯然就是這個問題。

3. 查看系統ulimit全局參數

[root@OneinStack ~]# grep -v ^# /etc/security/limits.conf


* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

奇怪,通過系統ulimit全局參數看,*代表所有用戶,www用戶竟然還有限制,於是Google獲知,REHL6下引入配置文件/etc/security/limits.d/90-nproc.conf(可參考:https://bugzilla.redhat.com/show_bug.cgi?id=919793)
注:也可能是其它命名,如Linode修改為:/etc/security/limits.d/20-nproc.conf

4. 修改/etc/security/limits.d/90-nproc.conf

[root@OneinStack ~]# grep -v ^# /etc/security/limits.d/90-nproc.conf

*          soft    nproc     1024
root       soft    nproc     unlimited

問題就在這裡,這裡限制為1024
修改為65535,保持文件如下:

[root@OneinStack ~]# grep -v ^# /etc/security/limits.d/90-nproc.conf

*          soft    nproc     65535
root       soft    nproc     unlimited

退出當前用戶,重新登錄即可讓之前修改的limits生效,執行如下命令發現修改成功

[root@OneinStack ~]# su - www
[www@OneinStack ~]$ 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) 256345
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
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) 65535
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

啟動java應用,問題解決

注:

如果使用*號讓全局用戶生效是受文件/etc/security/limits.d/90-nproc.conf中nproc值大小制約的,而如果僅僅是針對某個用戶,那麼就不受該文件nproc值大小的影響。 原文:https://blog.linuxeye.com/427.html
Copyright © Linux教程網 All Rights Reserved