私は次の方法で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 &
しかし、約500xのコンテナの後、次のエラーが発生し始めます。
fork: retry: No child processes
私がこれを実行しているサーバーには、48xコアと192 GBのRAMがあります...これらのコンテナを数千回も問題なくスピンアップできるはずです...この制限を増やす方法はありますか?
いくつかのグーグルを行った後、ulimit -u
を介して最大フォークの数を確認できることがわかりました...これを変更する方法はありますか?
Soren A
の答えは正当なように見えますが、これで問題が解決されたようには見えません。同じ問題に出くわす前に、〜12287スレッド(cat /sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.current
を介してチェス)に到達できます... /etc/security/limits.conf
のハード制限とソフト制限の両方が99999999
に設定されています12287
付近に上限がある
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.
すべてのユーザー(*)に設定する代わりに、プロセスを開始するユーザーに対してのみ設定できます。これにより、他のユーザーがシステム上の多くのリソースを取得できなくなります。