Linux報錯-bash: fork: retry: Resource temporarily unavailable和進程描述符之間的關係

      在公司服務器上切換用戶,出現 "-bash: fork: retry: Resource temporarily unavailable"這樣的報錯,查詢得知是普通用戶能夠使用的進程數太少和文件描述符太小導致的,每一個文件描述符會和一個文件對應,但是很多文件描述符也會和一個文件對應。相同的文件可以被不同的進程打開,也可以被同一個進程打開多次。我們可以從系統層面和進程層面來查看相應的文件描述符。

一,系統層面的文件描述符

      涉及到系統層面的,基本上都是通過修改內核參數來實現的,修改系統中的文件描述符可以通過下面兩種方式來實現:

      1,/proc/sys/fs/file-max,這個裏面記錄了系統中可以打開的文件描述符最大有多少個,我們可以使用cat查看下總數有多少個,如果不夠了echo進更大的數,一般情況下不用動的。

        cat    /proc/sys/fs/file-max

      2,方法1是臨時性的更改,系統重啓後參數就會失效,因此需要寫入文件中保存起來,Linux下修改的內核參數,修改的文件都是在/etc/sysctl.conf文件中,我們需要寫入下面內容:

         fs.file-max=xxxx

        然後使用sysctl -p 命令來生效。

  

      除此以外我們還可以通過/proc/sys/fs/file-nr參數來查看系統中文件描述符。

      cat   /proc/sys/fs/file-nr 

      2272   0     100000

      2272     : 表示當前系統已分配使用了多少文件描述符

       0          : 表示當前系統分配了2272個文件描述符,有多少個是沒有使用的。

      100000 : 表示系統中文件描述符總的個數

二,進程層面的文件描述符

      進程層面的文件描述符可以通過ulimit命令來表示,也可以通過配置文件生效,可以通過這兩種方法來生效:

      1,ulimit -u     表示單個用戶可以使用的最大的進程數

           ulimit -n      表示可打開的文件描述符的最大個數

           修改文件描述符可以通過這個命令:

           ulimit -SHn xxxxxx ,其中S表示"soft",表示軟限制,是可以超過這個限制,H表示"hard",表示硬限制,是不能超過這個限制的。

     2 , 同樣方法1是臨時性的,永久有效的話,必須寫入配置文件中,文件描述符中配置文件路徑在/etc/security/limits.conf 寫入

     * soft     nofile      32768      可以打開的文件描述符最大數(軟限制)
    * hard    nofile      65536      可以打開的文件描述符最大數(硬鏈接)

     * soft     nproc      32768      單個用戶可以使用的最大進程數(軟限制)
    * hard    nproc      65536      單個用戶可以使用的最大進程數(硬限制)

或者可以在/etc/security/limits.d/xxx-nproc.conf(若不存在則創建)寫入

     * soft     nproc      32768      
    * hard    nproc      65536      

在/etc/security/limits.d/xxx-nofile.conf(若不存在則創建)寫入
    * soft     nofile      32768      
    * hard    nofile      65536      

其中的第一列表示domain域,可以給沒某個用戶限制,或者某個用戶組限制,*表示對所有的用戶限制,但是root用戶除外,root用戶不受限制。具體的使用,可以使用man limits.conf來查詢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章