.gitignore | ||
install.sh | ||
LICENSE | ||
nohang | ||
nohang.1 | ||
nohang.conf | ||
nohang.logrotate | ||
nohang.service | ||
purge.sh | ||
README.md | ||
uninstall.sh |
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.