.gitignore | ||
install.sh | ||
LICENSE | ||
nohang | ||
nohang.1 | ||
nohang.1.gz | ||
nohang.conf | ||
nohang.service | ||
purge.sh | ||
README.md | ||
uninstall.sh |
The No Hang Daemon
Nohang - аналог earlyoom с поддержкой zram и SIGTERM.
Особенности
- задача - препятствовать зависанию системы при нехватке доступной памяти, а также корректное завершение процессов с целью увеличения объема доступной памяти
- демон на python3, RSS около 12 MiB
- требуется Linux 3.14+ и Python 3.4+
- периодически проверяет размеры доступной памяти, при дефиците памяти отправляет
SIGKILL
илиSIGTERM
процессу с наибольшимoom_score
- поддержка работы со
zram
, возможность реакции наmem_used_total
- удобный конфиг с возможностью тонкой настройки
- возможность раздельного задания уровней
MemAvailable
,SwapFree
,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
для предотвращения массовых убийств- наличие
man
страницы - наличие установщика для пользователей
systemd
- протестировано на
Debian 9 x86_64
,Debian 8 i386
,Fedora 28 x86_64
- вывод отчета об убийствах такого вида
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
Установка и удаление для пользователей systemd
git clone https://github.com/hakavlad/nohang.git
cd nohang
Установка
sudo ./install.sh
Удаление вместе с конфигом
sudo ./purge.sh
Удалить всё, кроме конфига
sudo ./uninstall.sh
Настройка
Nohang настраивается с помощью конфига, расположенного после установки по адресу
/etc/nohang/nohang.conf
К опциям прилагается описание. Отредактируйте значения параметров в соответствии с вашими предпочтениями.