Go to file
2018-07-06 00:01:21 +09:00
.gitignore add support white, black, avoid, prefer lists 2018-06-23 15:39:17 +09:00
install.sh support logging to separate file and support low memory warnings 2018-07-03 00:08:02 +09:00
LICENSE 1 2018-06-08 17:08:16 +09:00
nohang support EXECUTE THE COMMAND INSTEAD OF SENDING THE SIGTERM SIGNAL 2018-07-04 04:10:23 +09:00
nohang.1 множество улучшений 2018-06-11 04:52:39 +09:00
nohang.conf support EXECUTE THE COMMAND INSTEAD OF SENDING THE SIGTERM SIGNAL 2018-07-04 04:10:23 +09:00
nohang.logrotate support logging to separate file and support low memory warnings 2018-07-03 00:08:02 +09:00
nohang.service support logging to separate file and support low memory warnings 2018-07-03 00:08:02 +09:00
purge.sh support logging to separate file and support low memory warnings 2018-07-03 00:08:02 +09:00
README.md update readme 2018-07-06 00:01:21 +09:00
uninstall.sh support logging to separate file and support low memory warnings 2018-07-03 00:08:02 +09:00

The No Hang Daemon

Nohang is a highly flexible full-featured daemon for Linux that correctly prevents out of memory.

Features

  • Переиодическая проверка доступной памяти
  • задача - препятствовать зависанию системы при нехватке доступной памяти, а также корректное завершение процессов с целью увеличения объема доступной памяти
  • периодически проверяет объем доступной памяти, при дефиците памяти отправляет SIGKILL или SIGTERM процессу с наибольшим oom_score
  • поддержка работы со zram, возможность реакции на mem_used_total
  • удобный конфиг с возможностью тонкой настройки
  • возможность раздельного задания уровней MemAvailable, SwapFree, mem_used_total для отпраки SIGTERM и SIGKILL, возможность задания в процентах и мебибайтах.
  • возможность снижения oom_score_adj процессов, чьи oom_score_adj завышены (актуально для chromium)
  • лучший алгоритм выбора периодов между проверками доступной памяти: при больших объемах доступной памяти нет смысла проверять ее состояние часто, поэтому период проверки уменьшается по мере уменьшения размера доступной памяти
  • интенсивность мониторинга можно гибко настраивать (параметры конфига rate_mem, rate_swap, rate_zram)
  • возможность блокировки памяти с помощью mlockall() для предотвращения своппинга процесса
  • по умолчанию высокий приоритет процесса nice -15, может регулироваться через конфиг
  • предотвращение самоубийства с помощью self_oom_score_adj = -1000
  • возможность задания oom_score_min для предотвращения убийства невиновных
  • возможность предотвращения избыточного убийства процессов с помощью задания миниального oom_score для убиваемых процессов и установка минимальной задержки просле отправки сигналов (параметры конфига min_delay_after_sigkill и min_delay_after_sigterm)
  • возможность показа десктопных уведомлений c помощью notify-send, с показом сигнала (SIGTERM или SIGKILL), который отправлен процессу, а также Pid, oom_score, VmRSS, VmSwap, которыми обладал процесс перед получением сигнала.
  • поддержка white, black, prefer и avoid списков с использованием Perl-compatible regular expressions
  • возможность выполнения определенных команд как альтернатива отправке SIGTERM для избранных процессов (можно использовать для перезапуска демонов вместо завершения)
  • поддержка десктопных уведомлений о низком уровне доступной памяти
  • наличие установщика для пользователей systemd
  • протестировано на Debian 9 x86_64, Debian 8 i386, Fedora 28 x86_64
  • пример вывода с отчетом об успешной отпраке сигнала:
2018-06-30 Sat 19:42:56
  MemAvailable (0 MiB, 0.0 %) < mem_min_sigterm (470 MiB, 8.0 %)
  SwapFree (457 MiB, 7.8 %) < swap_min_sigterm (470 MiB, 8.0 %)
  Preventing OOM: trying to send the SIGTERM signal to tail,
  Pid: 14884, Badness: 866, VmRSS: 5181 MiB, VmSwap: 4983 MiB
  Success

Requirements

  • Linux 3.14+
  • Python 3.4+

Memory and CPU usage

  • VmRSS 9.5 - 12.9 MiB
  • Нагркзка на CPU зависит от объема доступной памяти и растет по мере уменьшения объема доступной памяти

Download, install, purge

git clone https://github.com/hakavlad/nohang.git
cd nohang

Установка

sudo ./install.sh

Удаление вместе с конфигом

sudo ./purge.sh

Удалить всё, кроме конфига

sudo ./uninstall.sh

Settings

Nohang настраивается с помощью конфига, расположенного после установки по адресу

/etc/nohang/nohang.conf

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

Почему Python, а не C?

  • Скорость разработки на Python значительно выше. Больше фич за приемлемое время.
  • Практически единственный минус Python - большее потребление памяти процессом.
  • На самом деле я просто не знаю C и немножко изучал Python, поэтому пишу на последнем.

Hint

Можно использовать nohang для мониторинга размера используемой zram памяти (традиционные утилиты для проверки объема доступной памяти, такие как free, top, htop, gnome-system-monitor не предоставляют информации об объеме памяти, занимаемом устройствами zram)

Known bugs

В рабочем алгоритме известных нет, если найдете - пишите в Issues.