Устройство Linux / Объяснение

Cgroup процесса: принадлежность, версия и видимый путь

Найдите cgroup выбранного PID, отличите v2 от legacy-записей и сопоставьте путь с монтированием, не предполагая одинаковую структуру внутри контейнера.

Средний8 минОбщие принципы LinuxLinux · понятия и интерфейсыBash · pipeline semantics

Сначала найдите группу нужной нагрузки

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

Учебная последовательность начинается с Bash: читаем её принадлежность и список монтирований cgroup2. Только после сопоставления пути имеет смысл переходить к страницам о памяти, CPU и количестве задач.

Запись процесса и каталог контроллеров

В /proc/PID/cgroup указана принадлежность к иерархиям. У v2 запись имеет форму 0::/путь; legacy-конфигурация может дать несколько строк. Пространство cgroup способно показывать путь относительно своего корня, а не полного дерева хоста.

Найдите монтирование cgroup2 и его FSROOT. При обычном полном монтировании с корнем / путь группы сопоставляется с TARGET плюс путь записи. При срезанном дереве или ограниченном представлении контейнера нельзя механически склеивать строки и объявлять результат каталогом нужной нагрузки.

Прочитайте принадлежность и монтирование

Нужны Linux, Bash и findmnt из util-linux. Команды показывают фактическое окружение; они не создают cgroup и не перемещают в неё процессы.

Локальная Linux-система
membership_pid=$$
cat "/proc/$membership_pid/cgroup"
findmnt -t cgroup2 -o TARGET,FSROOT,FSTYPE

Проверьте путь до чтения лимитов

В самостоятельно заданном примере запись равна 0::/training.slice/session.scope, TARGET — /sys/fs/cgroup, FSROOT — /. Для такого полного монтирования ожидаемый каталог — /sys/fs/cgroup/training.slice/session.scope. Это пример сопоставления, а не имя, которое обязано существовать у вас.

Если запись равна 0::/, не заключайте, что ограничений нет. В контейнере видимый корень может быть частью большей иерархии. Если findmnt не показал cgroup2, сначала разберитесь с версией и доступными монтированиями; применять имена интерфейсов v2 к legacy-дереву нельзя.

Проверьте своё рассуждение

Задача: в отчёте нет cpu.max по склеенному пути. Доказывает ли это отсутствие CPU-ограничения у службы?

Нет. Сначала проверьте группу, версию, видимость монтирования и доступность контроллера. Чтение несуществующего пути — проблема выбора источника данных, а не измерение бесконечного бюджета.

Принадлежность может измениться

Служба может перезапуститься, процесс — перейти в другую группу, а контейнер — скрывать родительскую иерархию. Записывайте PID и точный каталог вместе со снимком. Примеры следующих страниц требуют заменить демонстрационный путь на проверенный; они намеренно не вычисляют его вслепую.

Технические источники

Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.

  • Документация ядра Linux — Control Group v2
  • Linux man-pages — cgroups(7)
  • Linux man-pages — proc_pid_cgroup(5)
  • Linux man-pages — findmnt(8)

Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.

Нужны Linux с procfs и findmnt из util-linux. Страница определяет видимость cgroup v2; legacy и гибридные конфигурации требуют отдельного разбора. Монтирования и принадлежность не меняются.

От материала к практике

Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.

Поиск по Linux

Поиск локальный. ↑ ↓ — перейти к результату, Enter — открыть.

Навигация