Wiki
Инфраструктура

cgroups — что это простыми словами

cgroups (control groups) — механизм Linux-ядра для лимитов CPU/RAM/IO/сети процессам. Основа Docker, Kubernetes, systemd. cgroups v1 (устаревшие) и v2 (2016+).

cgroups (control groups) — механизм ядра Linux для лимитирования и учёта ресурсов процессов. Введён в 2007, cgroups v2 — 2016. Позволяет сгруппировать процессы и наложить лимиты: CPU (% ядер, weight), memory (жёсткий лимит, OOM-kill), blkio (IOPS диска), net (bandwidth), pids (max fork).

Пример: `systemd-run --scope --slice=user -p MemoryMax=1G -p CPUQuota=50% ./heavy-task` — запустит процесс с лимитом 1 ГБ RAM и половиной ядра. Превысил — OOM-killer убивает.

cgroups — основа контейнеров. Docker/containerd/podman создают cgroup при запуске контейнера и вписывают туда все дочерние процессы. `docker run --memory=512m --cpus=1.5` под капотом = cgroup v2 с `memory.max=512M`, `cpu.max=150000 100000`. Kubernetes идёт дальше — resource requests/limits транслируются в cgroups.

cgroups v1 (`/sys/fs/cgroup/{cpu,memory,pids,...}/`) vs v2 (единая иерархия `/sys/fs/cgroup/`). v2 — стабильно с ядра 5.0 (2019), единственная в новых Ubuntu/RHEL. Docker/K8s поддерживают обе.

Частые вопросы

Как узнать текущую cgroup процесса?
`cat /proc/$PID/cgroup` или `systemctl status $PID`.
cgroups в WSL/macOS?
cgroups — только Linux-ядро. Docker Desktop под капотом Linux VM с cgroups.

Смотрите также