SystemdDoctor
служба не работает ресурсы срезы

cgroup: fork rejected by pids controller

Предел числа задач считается для среза целиком и включает потоки, а не только процессы. Его исчерпание выглядит как случайные отказы создания процессов, причём пострадать может служба, которая сама этот предел не переполняла.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Предел задач службы исчерпан

    Каждый поток считается задачей. Многопоточная программа упирается в предел быстрее, чем ожидается по числу процессов.

  2. Предел исчерпан на срезе выше

    Пределы срезов складываются. Служба может упираться в предел системного среза при своём свободном.

  3. Утечка потоков в программе

    Программа создаёт потоки и не завершает их. Предел лишь обнаруживает утечку, а не вызывает её.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Предел и текущее число задач службы.

systemctl show myapp.service -p TasksMax -p TasksCurrent

Число задач по срезам и службам.

systemd-cgtop -1 -n1 | head -10

Сообщения ядра об отказах создания процессов.

journalctl -k -b --no-pager | grep -i "rejected by pids" | tail

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Предел задач службы исчерпан
Почему происходит
Каждый поток считается задачей. Многопоточная программа упирается в предел быстрее, чем ожидается по числу процессов.
Как проверить
Посмотрите предел и текущее число задач.
systemctl show myapp.service -p TasksMax -p TasksCurrent
systemd-cgls -u myapp.service 2>/dev/null | head
Как исправить
Поднимите предел задач для службы, оценив реальное число потоков. Значение по умолчанию невелико и рассчитано на обычные службы.
[Service]
TasksMax=4096
2. Предел исчерпан на срезе выше
Почему происходит
Пределы срезов складываются. Служба может упираться в предел системного среза при своём свободном.
Как проверить
Посмотрите пределы службы и её срезов.
systemctl show myapp.service -p Slice -p TasksMax
systemctl show system.slice -p TasksMax -p TasksCurrent
Как исправить
Поднимите предел на нужном уровне дерева. Узкое место бывает выше, чем кажется.
3. Утечка потоков в программе
Почему происходит
Программа создаёт потоки и не завершает их. Предел лишь обнаруживает утечку, а не вызывает её.
Как проверить
Посмотрите рост числа задач во времени.
for i in 1 2 3; do systemctl show myapp.service -p TasksCurrent; sleep 5; done
Как исправить
Исправьте утечку в программе. Поднятие предела в этом случае лишь отодвигает отказ.

Пример вывода

Предел задач исчерпан многопоточной службой. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

kernel: cgroup: fork rejected by pids controller in /system.slice/myapp.service
myapp[9800]: java.lang.OutOfMemoryError: unable to create native thread
systemd[1]: myapp.service: Main process exited, code=exited, status=1/FAILURE

Связанные ошибки

Источники

  • systemd.resource-control(5)
    TasksMax= и учёт задач в срезах.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено снижением предела задач для службы с потоками.
    собственная проверка, systemd 255
    сверено 15 сентября 2026