← Back to notes

Контроль групп процессов
(cgroups) в Linux

2025-10-24


Cgroups в Linux

Control Groups (cgroups) — механизм ядра Linux для ограничения, учёта и изоляции использования ресурсов группами процессов: CPU, memory, I/O, PID, cpuset и др.


Структура

Cgroups образуют иерархию: каждый узел — группа процессов с заданными лимитами. Контроллеры (controllers) применяют ограничения к ресурсам.

Контроллеры:

  • cpu — доля CPU
  • memory — лимиты RAM и swap
  • io (v2) / blkio (v1) — пропускная способность блочных устройств
  • pids — максимум процессов в группе
  • cpuset — привязка к CPU/NUMA-узлам
  • net_cls, net_prio — только в v1

Cgroup v1

sudo mkdir /sys/fs/cgroup/memory/test
echo 100M | sudo tee /sys/fs/cgroup/memory/test/memory.limit_in_bytes
echo $$ | sudo tee /sys/fs/cgroup/memory/test/cgroup.procs

В v1 у каждого контроллера своя иерархия, монтируется отдельно (/sys/fs/cgroup/memory, /sys/fs/cgroup/cpu и т.д.).


Cgroup v2

В v2 единая иерархия для всех контроллеров. systemd поддерживает unified hierarchy; включение по умолчанию зависит от дистрибутива и версии.

Точка монтирования: /sys/fs/cgroup (тип cgroup2).

mount -t cgroup2 none /sys/fs/cgroup

Ключевые файлы:

  • cgroup.procs — PID процессов в группе
  • cgroup.subtree_control — включение контроллеров для потомков
  • memory.max, memory.high, memory.swap.max — лимиты памяти (v2)
  • cpu.max, cpu.weight — лимиты CPU (v2)
  • io.max, io.weight — лимиты I/O (v2)

Интеграция с systemd

Каждый юнит (.service, .scope, .slice) выполняется в собственной cgroup. Лимиты задаются в unit-файле:

[Service]
MemoryMax=512M
CPUQuota=50%
TasksMax=100

См. systemd.resource-control(5).


Ссылки

Контроль групп процессов (cgroups) в Linux | Aleksandr Suprun