Ulimit
為什麼 ulimit -u 遠大於我正在執行的程序數會導致問題?
我正在執行 200 個程序,但是
ulimit -u
400 個程序似乎會導致一些問題:$ 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