为什么 ulimit -u 远远大于我正在运行的进程数会导致问题?

为什么 ulimit -u 远远大于我正在运行的进程数会导致问题?

我正在运行 200 个进程,但ulimit -u400 个进程似乎会导致一些问题:

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

我很困惑。为什么会达到极限?

编辑: 最初ulimit -u给出

$ ulimit -u
47334

答案1

在 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

相关内容