我正在尝试通过以下方式启动 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。
您可以只为启动您进程的用户设置它,而不是为所有用户设置它(*),以便其他用户无法在您的系统上获取那么多资源。