Я запускаю сервер, в основном для использования со случайными контейнерами Docker и в качестве бегуна Gitlab-CI. Время от времени, когда сервер работает около недели, я сталкиваюсь с ограничениями ресурсов процесса.
Например, я пытался настроить бегун gitlab,
...
Registering runner... succeeded runner=gy1zjHEv
runtime: failed to create new OS thread (have 9 already; errno=11)
runtime: may need to increase max user processes (ulimit -u)
fatal error: newosproc
...
Или через пару минут, пытаясь установить strace
утилита
(in dutch)
...
Instellen van strace (4.21-1ubuntu1) ...
Bezig met afhandelen van triggers voor man-db (2.8.3-2ubuntu0.1) ...
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
/usr/bin/mandb: fork failed: Hulpbron is tijdelijk onbeschikbaar
Bezig met afhandelen van triggers voor libc-bin (2.27-3ubuntu1) ...
Это переводится как fork failed: Resource is temporarily unavailable
Что-то вызывает fork
бросать EAGAIN
.
$ ulimit -u
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 1029355
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 32768
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 62987
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Мои максимальные пользовательские процессы установлены на 62987
, Я далеко не использую 62 000 процессов. Исключение gitlab также показало, что текущее количество процессов равно 9, что предположительно «слишком много»?
Как это возможно, что клон работает с ограничением ресурсов процесса, если я не приблизился к настроенному ulimit?
После долгих поисков оказалось, что у меня был лимит cgroups. А именно, запросив /sys/fs/cgroup/pids/pids.current
и /sys/fs/cgroup/pids/pids.max
, Я видел, что максимальное значение составляет около 400 пидсов, и я достиг этого предела.
CUR=$(cat /sys/fs/cgroup/pids/pids.current)
MAX=$(cat /sys/fs/cgroup/pids/pids.max)
echo $CUR/$MAX