Linux下-bash: fork: retry: Resource temporarily unavailable的解决方法

前几天,同事反映登陆到一台Linux服务器上之后,输入其他命令系统显示的都是如下代码:

-bash:fork:retry:Resourcetemporarilyunavailable

  • 问题分析
    实际上出现这种现象,本质原因是Linux操作系统无法创建更多进程,导致出错。
    知道了问题原因,那么就让Linux允许创建更多的进程就可以了。
  • 修改Linux最大进程数
    在服务器上执行ulimit -a
    可以看到如下结果:

    [oracle@oradb1 ~]$ 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) 1033243
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    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) 2047
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    其中open files (-n) 1024 这个值,就是我们要修改的地方了。

我们关注得比较多的是一个进程可打开的最大文件数,即open files。 系统允许创建的最大进程数量即是max user processes 这个参数。

  • 问题解决
    我们可以使用 ulimit -u 4096 修改max user processes的值,但是只能在当前终端的这个session里面生效,重新登录后仍然是使用系统默认值
    正确的修改方式是修改/etc/security/limits.d/90-nproc.conf文件中的值。

    [oracle@oradb1 ~]$ 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     4096
    root       soft    nproc     unlimited
    原文作者:Summer的小西瓜
    原文地址: https://segmentfault.com/a/1190000010674331
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞