Лимит задач cgroup v2: pids.current, max и events
Проверьте предел задач группы при отказе fork или создания потока. Отличите количество задач от номера PID и исследуйте рост событий без нагрузочного теста.
Не получается создать поток или дочерний процесс
Программа не может запустить ещё одного работника, хотя память кажется доступной. Помимо памяти проверьте ограничение числа задач группы. Для такого расследования не нужно запускать цикл создания процессов до отказа.
Мы только читаем счётчики и предел. Выбор безопасного наблюдения особенно полезен на рабочей машине: искусственное исчерпание задач помешало бы и диагностическим командам, и другим приложениям.
Число задач не равно максимальному номеру PID
pids.current учитывает задачи группы и потомков, pids.max ограничивает их число; потоки тоже расходуют этот бюджет. Значение max убирает границу данного уровня. Это не верхняя допустимая величина числового идентификатора процесса.
pids.events содержит счётчик событий max. Создание задачи при нарушении применимого предела может вернуть EAGAIN. Иногда current оказывается выше max после административного изменения границы или перемещения задач; это не разрешение бесконтрольно создавать новые.
Откройте три файла без создания нагрузки
Замените демонстрационный каталог на установленную cgroup v2 приложения. Сообщение «недоступно» сохраняет различие между отсутствием данных и нулём.
pids_group="/sys/fs/cgroup/example.slice/worker.scope"
for metric in pids.current pids.max pids.events; do
printf "%s: " "$metric"
if [ -r "$pids_group/$metric" ]; then cat "$pids_group/$metric"; else printf "недоступно\n"; fi
doneСопоставьте текущий запас и историю отказов
В собственном примере current равен 90, max — 96. Разница шесть описывает лишь снимок на этом уровне: параллельная работа и ограничения предков могут изменить фактическую возможность создания новой задачи. Не называйте её гарантией запуска шести процессов.
Сравните events до и после естественного эпизода ошибки. Прирост max согласуется со срабатыванием лимита, но текст ошибки и область группы всё равно нужны. Для программы с множеством потоков число строк привычного списка процессов может сильно отличаться от используемого бюджета задач.
Проверьте своё рассуждение
Задача: process list показывает десять программ, а pids.current — восемьдесят. Следует ли считать счётчик неисправным?
Нет. Проверьте потоки и поддерево группы. Десять многопоточных программ способны учитывать значительно больше задач; кроме того, сравниваемые списки могли относиться к разным областям видимости.
Одинаковая ошибка не всегда означает один механизм
EAGAIN при создании задачи может иметь и другие причины, включая отдельные системные пределы и rlimit. Не повышайте pids.max автоматически: сначала найдите механизм и источник чрезмерного роста. Этот пример не меняет ограничения и не обещает обойти недоступность родительской иерархии.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Документация ядра Linux — Control Group v2
- Linux man-pages — cgroups(7)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Только cgroup v2 с pids-контроллером и правами чтения. Нагрузка не создаётся, лимит не меняется. Для legacy-cgroup интерфейсы и детали нужно сверять отдельно.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.