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

Oct, 24, 2025

Cgroups в Linux

Control Groups (cgroups) — это механизм ядра Linux, позволяющий ограничивать, изолировать и контролировать использование ресурсов группами процессов.
Они предоставляют системным администраторам инструмент для управления CPU, памятью, вводом-выводом и сетевыми ресурсами.


🧩 Основная идея

Cgroups создают иерархическую структуру, где каждый узел дерева — это группа процессов с заданными ограничениями.
В отличие от отдельных процессов, cgroups позволяют управлять целыми наборами.

Примеры ресурсов, которыми можно управлять:

  • cpu — доля времени процессора
  • memory — лимиты по оперативной памяти
  • blkio — скорость чтения/записи на устройствах
  • pids — ограничение числа процессов
  • net_cls, net_prio — сетевые приоритеты

⚙️ Базовое использование

Создание и настройка 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

🔹 Ограничение памяти до 100 МБ для текущего процесса.
🔹 Файлы в /sys/fs/cgroup/ отражают состояние и настройки контроллеров.


🧠 Cgroups v2

Современные дистрибутивы используют cgroups v2 — унифицированный интерфейс с улучшенной моделью управления.
Основные отличия:

  • Единая иерархия для всех контроллеров
  • Упрощённая логика наследования ограничений
  • Улучшенная интеграция с systemd

Пример включения:

mount -t cgroup2 none /sys/fs/cgroup

🧩 Интеграция с Systemd

systemd использует cgroups v2 по умолчанию.
Каждый юнит (service, scope, slice) выполняется в собственной cgroup, что позволяет задавать ресурсы прямо в .service файлах:

[Service]
MemoryMax=512M
CPUQuota=50%

🧾 Заключение

Cgroups — фундаментальный механизм ресурсного контроля в Linux.
Они обеспечивают предсказуемость работы систем, многопользовательскую изоляцию и лежат в основе контейнерных технологий вроде Docker и Kubernetes.


📚 Ссылки:

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