← Назад к вопросам

Что такое cgroups в Linux?

2.0 Middle🔥 191 комментариев
#Linux и администрирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое cgroups в Linux?

cgroups (Control Groups) — это механизм Linux ядра, который позволяет ограничивать, контролировать и отслеживать использование системных ресурсов процессами или группами процессов. Это критически важный компонент для изоляции контейнеров в Docker и других решениях контейнеризации.

Основная функция

cgroups обеспечивают ограничение и мониторинг следующих ресурсов:

  • CPU — лимит на использование процессорного времени
  • Память (Memory) — максимальное использование оперативной памяти
  • I/O (блочные устройства) — пропускная способность диска
  • Сеть (Network) — ограничение трафика
  • PIDs — максимальное количество процессов в группе
  • Devices — доступ к устройствам

Версии cgroups

cgroups v1 — классический подход:

  • Множество подсистем (subsystems), каждая управляет отдельным типом ресурса
  • Иерархическая структура файловой системы
  • Локализована в /sys/fs/cgroup/

cgroups v2 — современный подход:

  • Единая иерархия для всех контроллеров
  • Лучшая производительность и упрощённое управление
  • Постепенно вытесняет v1

Примеры использования

# Просмотр текущих cgroup контейнера
cat /proc/self/cgroup

# Установка лимита памяти (cgroup v1)
echo 512M > /sys/fs/cgroup/memory/my_group/memory.limit_in_bytes

# Просмотр использования памяти
cat /sys/fs/cgroup/memory/my_group/memory.usage_in_bytes

Docker и cgroups

Kогда вы запускаете Docker контейнер с флагом --memory=512m, Docker автоматически создаёт cgroup и устанавливает лимит памяти. Также используются лимиты на CPU:

# Лимит памяти и CPU shares
docker run -m 512m --cpus=1 nginx

Важность для DevOps

cgroups критичны при:

  • Изоляции контейнеров в Kubernetes и Docker
  • Предотвращении resource starvation (когда один процесс съедает все ресурсы)
  • Шейпировании сетевого трафика
  • Мониторинге использования ресурсов

Без cgroups система не могла бы гарантировать стабильность: один "плохой" процесс мог бы исчерпать все ресурсы и привести к отказу в обслуживании для других приложений.