![Linux:一个进程组可以发出的 fork() 调用次数是否有限制? (不是每个用户!)](https://linux22.com/image/206500/Linux%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E7%BB%84%E5%8F%AF%E4%BB%A5%E5%8F%91%E5%87%BA%E7%9A%84%20fork()%20%E8%B0%83%E7%94%A8%E6%AC%A1%E6%95%B0%E6%98%AF%E5%90%A6%E6%9C%89%E9%99%90%E5%88%B6%EF%BC%9F%20%EF%BC%88%E4%B8%8D%E6%98%AF%E6%AF%8F%E4%B8%AA%E7%94%A8%E6%88%B7%EF%BC%81%EF%BC%89.png)
我们在 SuSE Linux Enterprise Server 12.5 系统(内核 4.12.14-122.60)上遇到一个奇怪的问题,该系统是类似 KVM 主机中唯一的 KVM 来宾:
由 systemd 启动的一项服务启动一个程序 -> 进程,然后派生一个启动其他程序 -> 子进程,该子进程再次派生更多程序 -> 子进程。
约后。 50 或 60 个 fork(包括一些 JAVA 子进程),这将停止来自该进程树的所有连续 fork() 调用,失败并出现 errno=11(资源临时值不可用)。
同一 UID(用户)的并行运行登录会话仍然可以创建新进程,甚至可以启动 systemd 初始化树中失败的程序。
据我了解,/etc/security/limits.conf 中的 NPROC 设置是系统范围的限制,例如一个 UID。但这里看起来好像有一个限制只适用于一个父进程及其子进程和孙进程?
是否有这样的限制,我们如何修改/扩展它?或者它可能是另一个间接导致此行为的参数吗?
附加信息:此问题仅发生在我们安装的一台服务器上。所有其他人都可以正常工作。这个有 160 个 CPU 核心和 128GB 内存,其他的都不到 50%。该系统上的默认 NPROC 值为 628000 ...
任何提示或帮助表示赞赏。
问候 斯特凡 B.
PS:在 2016 年,Arch-Linux 发现了一些类似的问题,但我不知道使用 TasksMax 的解决方案是否也适用于此。