⚙️ Теория
Cgroups в Linux
Control Groups (cgroups) — это механизм ядра Linux, позволяющий ограничивать, изолировать и контролировать использование ресурсов группами процессов.
Они предоставляют системным администраторам инструмент для управления CPU, памятью, вводом-выводом и сетевыми ресурсами.
🧩 Основная идея
Cgroups создают иерархическую структуру, где каждый узел дерева — это группа процессов с заданными ограничениями.
В отличие от отдельных процессов, cgroups позволяют управлять целыми наборами.
Примеры ресурсов, которыми можно управлять:
cpu— доля времени процессораmemory— лимиты по оперативной памятиblkio— скорость чтения/записи на устройствахpids— ограничение числа процессовnet_cls,net_prio— сетевые классы/приоритеты (контроллеры cgroups 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
🔹 Ограничение памяти до 100 МБ для текущего процесса.
🔹 Файлы в /sys/fs/cgroup/ отражают состояние и настройки контроллеров.
🧠 Cgroups v2
Современные дистрибутивы используют cgroups v2 — унифицированный интерфейс с улучшенной моделью управления.
Основные отличия:
- Единая иерархия для всех контроллеров
- Упрощённая логика наследования ограничений
- Улучшенная интеграция с
systemd
На большинстве современных систем cgroup2 уже смонтирован systemd.
Ручной пример (если не смонтирован):
mount -t cgroup2 none /sys/fs/cgroup
🧩 Интеграция с Systemd
Во многих современных дистрибутивах systemd использует cgroups v2 по умолчанию.
Каждый юнит (service, scope, slice) выполняется в собственной cgroup, что позволяет задавать ресурсы прямо в .service файлах:
[Service]
MemoryMax=512M
CPUQuota=50%
🧪 Практика
- Используйте команды и примеры из разделов выше как рабочий чеклист.
- Перед применением в production валидируйте изменения на test/stage и сверяйте с официальной документацией.
🧾 Вывод
Cgroups — фундаментальный механизм ресурсного контроля в Linux.
Они обеспечивают предсказуемость работы систем, многопользовательскую изоляцию и лежат в основе контейнерных технологий вроде Docker и Kubernetes.