Ulimit

為什麼 ulimit -u 遠大於我正在執行的程序數會導致問題?

  • September 2, 2016

我正在執行 200 個程序,但是ulimit -u400 個程序似乎會導致一些問題:

$ ps -A | wc -l
199
$ ulimit -u 400
zsh: fork failed: resource temporarily unavailable

我很困惑。為什麼會達到極限?

編輯:最初ulimit -u給出

$ ulimit -u
47334

在 Linux上,執行緒計入ulimit -u計數,但它們通常不會以ps -A. 您需要添加L標誌。

例如在我的機器上:

% ps -A | wc -l 
124
% ps -AL | wc -l
155

我們可以看到還有 31 個程序在執行;這些是執行緒,通常隱藏在視圖之外。

使用 java 和其他高度執行緒化的應用程序,可以輕鬆執行比您想像的更多的執行緒/程序。您的ulimit -u價值需要考慮到這一點。

這可能會意外地打擊在 RedHat 系統上執行大量 Java 應用程序的人,預設情況下,它具有以下ulimit設置:

% cat /etc/security/limits.d/20-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

引用自:https://unix.stackexchange.com/questions/307517