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.
📚 Ссылки: