TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #839 1.49K
❗️ cgroups v2: ограничение CPU/RAM для сервисов без Docker

Многие привыкли к тому, что лимиты CPU и памяти - это что-то из мира docker и k8s. Но на самом деле механизм один и тот же: cgroups. И если у вас обычный linux-сервер без контейнеров, вы все равно можете жестко ограничивать ресурсы для systemd-сервисов.

Это удобно, когда один процесс начинает съедать всю память, душить CPU или мешать остальным сервисам на хосте.

В современных дистрибутивах используется cgroups v2, а systemd умеет работать с ним из коробки.

▪️ Что можно ограничить:

Память. Чтобы сервис не выедал весь RAM и не отправлял сервер в OOM.
CPU. Чтобы процесс не занимал все ядра и не мешал соседям.
Число процессов. Чтобы защититься от fork-бомб и неконтролируемого роста дочерних процессов.

▪️ Пример: ограничим сервис по памяти и CPU.. Откроем override-конфиг:


systemctl edit myapp.service


Добавим:


[Service]
MemoryMax=500M
CPUQuota=50%
TasksMax=200


MemoryMax=500M - сервис не сможет использовать больше 500 МБ памяти
CPUQuota=50% - максимум половина одного CPU
TasksMax=200 - не более 200 процессов/потоков

После этого применяем изменения:


systemctl daemon-reload
systemctl restart myapp.service


Проверить лимиты можно так:


systemctl show myapp.service | grep -E "MemoryMax|CPUQuota|TasksMax"


Или посмотреть, в какой cgroup живет процесс:


systemctl status myapp.service


Если хотите ограничить уже запущенный сервис без ручного редактирования unit-файла, можно использовать runtime-свойства:


systemctl set-property myapp.service MemoryMax=300M CPUQuota=25%


Это удобно для быстрого придушивания прожорливого процесса на боевом сервере.

▪️ Еще полезные параметры:


[Service]
MemoryHigh=400M
MemoryMax=500M
CPUWeight=200
IOWeight=200


Тут разница такая:

MemoryHigh - мягкий порог, после которого ядро начинает сильнее давить процесс по памяти
MemoryMax - жесткий предел
CPUWeight - относительный приоритет по CPU среди других cgroup
IOWeight - относительный приоритет по дисковому I/O

⚠️ Важно помнить

CPUQuota=50% - это не половина всех ядер, а квота CPU-времени. На многоядерных системах поведение нужно понимать внимательно.

И еще: если сервис уже упирается в лимит памяти, он может начать падать, а не магически оптимизироваться. Лимиты защищают систему, но не исправляют плохое приложение.

#systemd #cgroups

🧑‍💻 NetworkAdmin
  • 👍 9
  • 🔥 3
  • ❤ 1
More from @networkadminru
  1. Sep 30, 2026🖥 Get-ADUser: полезные примеры для работы с пользователями Active Directory Get-ADUser -…
  2. Sep 30, 2026👁‍🗨 Хочешь разбираться в информационной безопасности, а не просто копировать чужие коман…
  3. Sep 29, 2026🥱 Как быстро разобраться с дисками и маунтами Когда на сервере несколько дисков, LVM, отд…
  4. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
  5. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
  6. Sep 23, 2026💻 Как жестко перезагрузить linux, когда обычный reboot уже не помогает Иногда сервер зави…
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 →