59 lines
3.8 KiB
Markdown
59 lines
3.8 KiB
Markdown
|
||
The No Hang Daemon
|
||
==================
|
||
|
||
Nohang - аналог [earlyoom](https://github.com/rfjakob/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 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
|
||
```bash
|
||
git clone https://github.com/hakavlad/nohang.git
|
||
cd nohang
|
||
```
|
||
Установка
|
||
```bash
|
||
sudo ./install.sh
|
||
```
|
||
Удаление вместе с конфигом
|
||
```bash
|
||
sudo ./purge.sh
|
||
```
|
||
Удалить всё, кроме конфига
|
||
```bash
|
||
sudo ./uninstall.sh
|
||
```
|
||
|
||
### Настройка
|
||
Nohang настраивается с помощью [конфига](https://github.com/hakavlad/nohang/blob/master/nohang.conf), расположенного после установки
|
||
по адресу
|
||
```
|
||
/etc/nohang/nohang.conf
|
||
```
|
||
К опциям прилагается описание. Отредактируйте значения параметров в соответствии с вашими предпочтениями.
|