如何增加 Ubuntu 16.04 中的最大分叉数量

如何增加 Ubuntu 16.04 中的最大分叉数量

我正在尝试通过以下方式启动 1000x Docker 容器:

nohup docker run --rm --name n-$1-$2 n-v2 bash -c "/root/sw/run.sh $1 $2" 2> ~/logs/log-$1-$2.log &

但在大约 500 个容器之后,我开始收到以下错误:

fork: retry: No child processes

我运行这个程序的服务器有 48 个核心和 192 GB 的 RAM...我应该能够毫无问题地启动几千个这样的容器...有没有办法增加这个限制?

经过一些谷歌搜索后,我发现我可以通过...检查最大分叉数ulimit -u有没有办法改变这一点?

Soren A的答案似乎合理,但这似乎并没有解决问题。cat /sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.current在我开始遇到同样的问题之前,我可以访问~12287 个线程(通过检查)......我的硬限制和软限制都/etc/security/limits.conf设置为99999999,但我仍然被限制在12287

答案1

您可以ulimit -u <value> 使用以下行临时设置这些值,或者在 /etc/security/limits.conf 中永久设置这些值:

*    hard    nproc  64000
*    soft    nproc  64000

或者,如果您愿意,可以在 /etc/security/limits.d 中的 .conf 文件中执行相同操作,例如 /etc/security/limits.d/90-nproc.conf。

您可以只为启动您进程的用户设置它,而不是为所有用户设置它(*),以便其他用户无法在您的系统上获取那么多资源。

相关内容