TGViewer
Linux Ready | DevOps Linux Ready | DevOps @linux_ready · 11.2K subscribers
Post #1451 1.62K
Управляем ресурсами процессов через cgroups v2!

При эксплуатации серверов снижение производительности нередко связано с постепенным ростом потребления ресурсов одним из сервисов. В результате уменьшается объём доступного процессорного времени и памяти для остальных процессов, что отрицательно влияет на стабильность всей системы.

Для управления ресурсами в Linux используется механизм control groups (cgroups). Он позволяет ядру учитывать и ограничивать потребление CPU, памяти, дискового ввода-вывода и количество задач, включая процессы и потоки.

В большинстве современных дистрибутивов по умолчанию используется cgroups v2. Проверить это можно командой:
findmnt -t cgroup2


или:
stat -fc %T /sys/fs/cgroup


Если используется cgroups v2, в последнем случае будет получен вывод:
cgroup2fs


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

Например, ограничить объём памяти для сервиса можно следующим образом:
systemctl set-property nginx.service MemoryMax=1G


После применения параметра systemd устанавливает соответствующее ограничение для cgroup сервиса. При достижении лимита ядро сначала пытается освободить память, а если это невозможно, OOM-механизм memory cgroup может завершить один или несколько процессов.

Следует учитывать, что MemoryMax ограничивает не только анонимную память приложения, но и учитываемый page cache. Проверить текущие значения можно командой:
systemctl show nginx.service -p MemoryCurrent -p MemoryMax


Для анализа текущего потребления ресурсов удобно использовать:
systemd-cgtop


Утилита отображает активные cgroups, текущее использование CPU и памяти, объём ввода-вывода и количество задач, что позволяет быстро определить сервис, создающий основную нагрузку.

Ограничение использования процессора задаётся аналогичным образом:
systemctl set-property worker.service CPUQuota=50%


Значение CPUQuota=50% соответствует половине времени одного логического процессора, а CPUQuota=200% позволяет использовать до двух логических процессоров. Ограничение распространяется на суммарное использование CPU всеми процессами, входящими в cgroup сервиса.

Количество процессов и потоков можно ограничить следующим параметром:
systemctl set-property worker.service TasksMax=200


Это предотвращает неконтролируемое создание задач и снижает риск исчерпания системных ресурсов.

Постоянные ограничения удобно задавать через override-конфигурацию:
systemctl edit worker.service


Например:
[Service]
MemoryMax=2G
CPUQuota=200%
TasksMax=500


После изменения конфигурации сервис необходимо перезапустить:
systemctl restart worker.service


🔥 Механизм cgroups работает на уровне ядра и применяет ограничения к группе процессов независимо от языка программирования или способа запуска приложения. На основе cgroups v2 реализованы механизмы управления ресурсами в systemd и большинстве современных контейнерных платформ.

🚪 Linux Ready | #практика
  • 👍 15
  • 🔥 6
  • ❤ 5
  • 🤝 1
More from @linux_ready
  1. Oct 2, 2026В Linux можно копировать собранные файлы так, чтобы не менять файл назначения, если новая…
  2. Oct 2, 2026🎓 Как гарантированно войти в сферу кибербезопасности с официальным дипломом? Самостоятель…
  3. Oct 2, 2026👩‍💻 SSH: подключение, ключи, туннели и Jump Host! В этом посте собраны основные команды…
  4. Oct 1, 2026Проверяем состояние соединений через conntrack! Linux firewall работает не только с отдель…
  5. Oct 1, 2026👩‍💻 Подключаем удалённый каталог как обычную папку через SSHFS! Если файлы находятся на…
  6. Sep 30, 2026Восстанавливаем удалённый файл через /proc, пока процесс держит его открытым! rm удаляет и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →