nohang/README.md
Alexey Avramov c329f92c2c 1
2018-06-08 17:08:16 +09:00

70 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

The No Hang Daemon
==================
Nohang - аналог earlyoom с поддержкой zram и SIGTERM.
Особенности:
============
- задача - препятствовать зависанию системы при нехватке доступной памяти, а также корректное завершение процессов с целью увеличения объема доступной памяти
- демон на python3, RSS около 12 MiB
- требуется Python 3.4+ и Linux 3.14+
- периодически проверяет размеры доступной памяти, при дефиците памяти отправляет SIGKILL или SIGTERM процессу с наибольшим oom_score
- поддержка работы со zram, возможность реакции на mem_used_total
- удобный конфиг с возможностью тонкой настройки
- возможность раздельного задания уровней MemAv, SwFree, mem_used_total для отпраки SIGTERM и SIGKILL, возможность задания в %, KiB, MiB, GiB
- возможность снижения oom_score_adj процессов, чьи oom_score_adj завышены (актуально для chromium)
- лучший алгоритм выбора периодов между проверками доступной памяти: при больших объемах доступной памяти нет смысла проверять ее состояние часто, поэтому период проверки уменьшается по мере уменьшения размера доступной памяти
- интенсивность мониторинга можно гибко настраивать (параметры конфига rate_mem, rate_swap, rate_zram)
- память заблокирована с помощью mlockall() для предотвращения своппинга процесса
- по умолчанию высокий приоритет процесса nice -20, может регулироваться через конфиг
- предотвращение самоубийства с помощью self_oom_score_adj = -1000
- возможность задания oom_score_min для предотвращения убийства невиновных
- min_delay_after_sigkill для предотвращения массовых убийств
- вывод отчета об убийствах такого вида:
2018-Jun-07 04:55:16 Mem: 0 M, Swap: 454 M, Zram: 488 M
mem_available < mem_term_level and swap_free < swap_term_level
Try to send signal 15 to process python3, Pid 7281, oom_score 893
Success
- наличие системд юнита
- ман страница сделана
- инсталлятор и деинсталлятор есть
Протестировано на Debian 9 x86_64, Debian 9 x86, Debian 8 x86, Fedora 28 x86_64.
Установка
=========
git clone https://github.com/hakavlad/nohang.git
cd nohang
sudo ./install.sh
Удаление вместе с конфигом
==========================
sudo ./purge.sh
Удалить всё, кроме конфига
==========================
sudo ./uninstall.sh
Настройка
=========
Nohang настраивается с помощью конфига, расположенного после установки
по адресу /etc/nohang/nohang.cong
К опциям прилагается описание.