Go to file
Alexey Avramov 60720b2e90 12
2018-06-08 18:37:08 +09:00
.gitignore 2 2018-06-08 17:41:53 +09:00
install.sh 2 2018-06-08 17:41:53 +09:00
LICENSE 1 2018-06-08 17:08:16 +09:00
nohang 1 2018-06-08 17:08:16 +09:00
nohang.1 9 2018-06-08 18:23:26 +09:00
nohang.conf 1 2018-06-08 17:08:16 +09:00
nohang.service 1 2018-06-08 17:08:16 +09:00
purge.sh 1 2018-06-08 17:08:16 +09:00
README.md 12 2018-06-08 18:37:08 +09:00
uninstall.sh 1 2018-06-08 17:08:16 +09:00

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
  • удобный конфиг с возможностью тонкой настройки
  • возможность раздельного задания уровней 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 9 x86, Debian 8 x86, 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

К опциям прилагается описание. Отредактируйте значения параметров в соответствии с вашими предпочтениями.