天天看點

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

前幾天,同僚反映登陸到一台Linux伺服器上之後,輸入其他指令系統顯示的都是如下代碼:

-bash:fork:retry:Resourcetemporarilyunavailable

  • 問題分析

    實際上出現這種現象,本質原因是Linux作業系統無法建立更多程序,導緻出錯。

    知道了問題原因,那麼就讓Linux允許建立更多的程序就可以了。

  • 修改Linux最大程序數

    在伺服器上執行ulimit -a

    可以看到如下結果:

    [[email protected] ~]$ 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

    檔案中的值。
    [[email protected] ~]$ 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
               

繼續閱讀