-sh: fork failed – too many processes

    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参数

    1. [root@OneinStack ~]# su - www
    2. [www@OneinStack ~]$ ulimit -a
    3. core file size          (blocks, -c) 0
    4. data seg size           (kbytes, -d) unlimited
    5. scheduling priority             (-e) 0
    6. file size               (blocks, -f) unlimited
    7. pending signals                 (-i) 256345
    8. max locked memory       (kbytes, -l) 64
    9. max memory size         (kbytes, -m) unlimited
    10. open files                      (-n) 65535
    11. pipe size            (512 bytes, -p) 8
    12. POSIX message queues     (bytes, -q) 819200
    13. real-time priority              (-r) 0
    14. stack size              (kbytes, -s) 10240
    15. cpu time               (seconds, -t) unlimited
    16. max user processes              (-u) 1024
    17. virtual memory          (kbytes, -v) unlimited
    18. file locks                      (-x) unlimited

    从上面可以看出,系统默认max user processes为1024,显然就是这个问题。

    3. 查看系统ulimit全局参数

    1. [root@OneinStack ~]# grep -v ^# /etc/security/limits.conf
    2. * soft nproc 65535
    3. * hard nproc 65535
    4. * soft nofile 65535
    5. * 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

    1. [root@OneinStack ~]# grep -v ^# /etc/security/limits.d/90-nproc.conf
    2. *          soft    nproc     1024
    3. root       soft    nproc     unlimited

    问题就在这里,这里限制为1024
    修改为65535,保持文件如下:

    1. [root@OneinStack ~]# grep -v ^# /etc/security/limits.d/90-nproc.conf
    2. *          soft    nproc     65535
    3. root       soft    nproc     unlimited

    退出当前用户,重新登录即可让之前修改的limits生效,执行如下命令发现修改成功

    1. [root@OneinStack ~]# su - www
    2. [www@OneinStack ~]$ ulimit -a
    3. core file size          (blocks, -c) 0
    4. data seg size           (kbytes, -d) unlimited
    5. scheduling priority             (-e) 0
    6. file size               (blocks, -f) unlimited
    7. pending signals                 (-i) 256345
    8. max locked memory       (kbytes, -l) 64
    9. max memory size         (kbytes, -m) unlimited
    10. open files                      (-n) 65535
    11. pipe size            (512 bytes, -p) 8
    12. POSIX message queues     (bytes, -q) 819200
    13. real-time priority              (-r) 0
    14. stack size              (kbytes, -s) 10240
    15. cpu time               (seconds, -t) unlimited
    16. max user processes              (-u) 65535
    17. virtual memory          (kbytes, -v) unlimited
    18. file locks                      (-x) unlimited

    启动java应用,问题解决

    注:如果使用*号让全局用户生效是受文件/etc/security/limits.d/90-nproc.conf中nproc值大小制约的,而如果仅仅是针对某个用户,那么就不受该文件nproc值大小的影响。

    Wed Aug 26 14:55:49 CST 2015

    • 本文由 发表于 2015-08-26
    • 转载请务必保留本文链接:https://linuxeye.com/427.html
    Consul集群配置 Linux

    Consul集群配置

    consul原理 上图是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端。consul客户端不保存数据,客户端将接收到的请求转发给响应的Se...
    CentOS、Ubuntu、Debian依赖源配置 Linux

    CentOS、Ubuntu、Debian依赖源配置

    基础文档来一一篇,本文档以配置阿里云源为例,可将地址替换为其它源,如清华源地址:mirrors.tuna.tsinghua.edu.cn CentOS 7 yum源 rm -rf /etc/yum.r...
    匿名

    发表评论

    匿名网友