我正在运行 200 个进程,但ulimit -u
400 个进程似乎会导致一些问题:
$ 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