Я пытаюсь развернуть 1000 контейнеров 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 ГБ оперативной памяти ... Я смогу без проблем раскрутить несколько тысяч таких контейнеров ...есть ли способ увеличить этот предел?
После некоторого поиска в Google я обнаружил, что могу проверить количество максимальных вилок с помощью 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
Или то же в a, conf файл в/etc/security/limits.d, напр./etc/security/limits.d/90-nproc.conf, если Вам нравится.
Вместо того, чтобы установить его для всех пользователей (*) Вы могли сделать это только для пользователя, начинающего Ваши процессы, так, чтобы другие пользователи не могли захватить это много ресурсов в Вашей системе.