.gitignore | ||
install.sh | ||
LICENSE | ||
nohang | ||
nohang.1 | ||
nohang.conf | ||
nohang.service | ||
purge.sh | ||
README.md | ||
uninstall.sh |
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 для предотвращения массовых убийств
- вывод отчета об убийствах такого вида:
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.conf`
К опциям прилагается описание.