Назад | Перейти на главную страницу

Превышен предел процесса, но не уверен, как

Я запускаю сервер, в основном для использования со случайными контейнерами 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

$ 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