Коли пам’ять закінчується, ядро запускає жорсткий OOM-killer. Але systemd-oomd реагує раніше й м’якше: моніторить тиск пам’яті (PSI), приймає рішення на рівні cgroup та допомагає утримати систему живою. Нижче — як увімкнути його, налаштувати політики, акуратно протестувати та зберегти log-файли Linux для аналізу. Усе робимо через термінал Linux і з прицілом на оптимізацію продуктивності.
Перевірка вимог і стану
Systemd-oomd потребує ядра з PSI та cgroup v2. Перевірте оточення:
Якщо служба не активна — увімкніть її:
Якщо у вас старий дистрибутив без cgroup v2 за замовчуванням — перейдіть на сучасне ядро/реліз або вмикайте systemd.unified_cgroup_hierarchy=1 у GRUB (потребує перезавантаження).
Базове налаштування через oomd.conf.d
Глобальні пороги задаються у drop-in каталозі. Так безпечно вносити зміни і легко їх відкочувати.
Ці дефолтні пороги застосовуються для slice-ів/юнитів, де поведінка не перевизначена.
Політики на рівні slice та сервісів
Точніше керування дають опції ManagedOOM* у slice-ах і ліміти пам’яті у service-юнітах.
Приклад: агресивніша політика для user.slice
Для системних служб налаштовуйте їхні memory-ліміти — так ви підкажете oomd і ядру, що «боляче» для конкретної служби.
Порада: для критичних сервісів (наприклад, sshd) задайте MemoryMin=, щоб зменшити їх шанс потрапити під завершення.
Тестування: симуляція браку пам’яті
Акуратно перевіримо, як спрацьовує політика. Використаємо stress-ng і паралельно подивимось PSI та журнали.
Очікуйте у логах повідомлення на кшталт «Selected cgroup … to kill» і «Killed» з деталями про жертву, споживання пам’яті та причини. Це основа для Linux моніторинг інцидентів пам’яті.
Альтернативи та сумісність
- earlyoom, nohang: схожі інструменти користувацького простору. Не рекомендується тримати їх одночасно з systemd-oomd — дублювання рішень.
- Ядерний OOM-killer все одно лишається останньою лінією оборони, якщо користувацькі механізми не впоралися.
- Без swap: oomd працює й без нього, орієнтуючись на PSI. Проте невеликий swap інколи покращує плавність під навантаженням.
GUI-спосіб (спостереження, не конфіг)
Прямого GUI для політик oomd немає. Але для візуального спостереження під час тесту можна:
- GNOME:
gnome-system-monitor(пам’ять процесів, історія). - KDE:
plasma-systemmonitor. htop: зручно дивитися RAM/Swap і навантаження CPU; у нових версіях є індикація PSI.
Логування та збереження журналів
Щоб після перезавантаження зберігалися події про OOM, ввімкніть персистентні журнали journald і навчіться швидко їх фільтрувати.
Зберігайте ці виходи як артефакти інцидентів — це цінні log-файли Linux для ретроспектив і тюнінгу.
Порада від Kernelka
🛡️ Виділіть «недоторканні» ресурси критичним службам: MemoryMin= для sshd, DNS, log-агентів. Тестуйте політики на стенді або в «тихі» години, а потім поступово зменшуйте/підкручуйте пороги. Пам’ятайте про резерв конфігів і чіткі зміни з *.d drop-in — так простіше відкотитися.
FAQ
Чим systemd-oomd відрізняється від ядрового OOM-killer?
OOM-killer спрацьовує в крайньому випадку, коли пам’яті вже зовсім немає. systemd-oomd базується на PSI (тиску пам’яті) і втручається раніше, вибираючи жертви на рівні cgroup відповідно до політик.
Як захистити важливий сервіс від завершення?
Задайте MemoryMin= у його юніті та уникайте агресивних ManagedOOM* для slice, де він живе. Також розгляньте OOMPolicy=kill/stop у сервісі, якщо потрібно кероване відновлення.
Служба не стартує або «мовчить». Що перевірити?
Переконайтеся, що активний cgroup v2, версія systemd достатня, а також що немає конфліктів з іншими OOM-демонами (earlyoom/nohang). Дивіться журнали: journalctl -u systemd-oomd -b.
Чи можна повністю вимкнути systemd-oomd?
Так: sudo systemctl disable --now systemd-oomd. Але майте план B — ядровий OOM-killer все одно діятиме, і це може бути болючіше.
Swap обов’язковий?
Ні. Зі swap oomd має додатковий тригер за рівнем його зайнятості. Без swap фокусується на PSI.
Підсумок
- Увімкніть systemd-oomd і задайте дефолтні пороги в
/etc/systemd/oomd.conf.d/. - Налаштуйте
ManagedOOM*у потрібних slice і ліміти пам’яті (MemoryHigh/Max/Min) для сервісів. - Протестуйте навантаженням (
stress-ng), паралельно слідкуючи за PSI та журналами. - Увімкніть персистентні журнали
journaldі фільтруйте події відsystemd-oomd. - Захистіть критичні служби через
MemoryMinі поступово тюньте пороги. 🚀

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.