From 626592190b7bc0611541ed6305ba9e4c189af39e Mon Sep 17 00:00:00 2001 From: Alexey Avramov Date: Tue, 12 Jun 2018 13:53:04 +0900 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D1=81=D0=BC=D0=B5=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++++------- nohang | 12 +++++++----- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e26b91f..d2fbcd3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ The No Hang Daemon ================== -`Nohang` - аналог [earlyoom](https://github.com/rfjakob/earlyoom) с поддержкой `zram` и `SIGTERM`. При дефиците доступной памяти `nohang` корректно завершает наиболее прожорливые процессы сигналом `SIGTERM`, тем самым препятствуя зависанию, а также избыточному убийству процессов ядерным `OOM killer`'ом. +`Nohang` - аналог [earlyoom](https://github.com/rfjakob/earlyoom) с поддержкой `zram` и `SIGTERM`. При дефиците доступной памяти `nohang` корректно завершает наиболее прожорливые процессы сигналом `SIGTERM` или `SIGKILL`, тем самым препятствуя зависанию, а также избыточному убийству процессов ядерным `OOM killer`'ом. ### Зачем это нужно? @@ -25,7 +25,7 @@ https://www.linux.org.ru/forum/talks/12684213?lastmod=1466676523241#comment-1268 "И IRL ты никогда не знаешь, в какой момент момент твои данные перестанут умещаться в оперативку. Потому zram -- удел embedded систем, где это может быть детерминировано." https://2ch.hk/s/res/2310304.html#2311483, https://archive.li/idixk -`Nohang` позволяет избавиться от перечисленных выше проблем, корректно завершая наиболее прожорливые процессы сигналом `SIGTERM` не дожидаясь когда система "встанет колом". `Nohang` позволяет не бояться зависаний при использовании `zram`. +`Nohang` позволяет избавиться от перечисленных выше проблем, корректно завершая наиболее прожорливые процессы (с наибольшим oom_score) сигналом `SIGTERM` (или `SIGKILL`) не дожидаясь когда система "встанет колом". `Nohang` позволяет не бояться зависаний при использовании `zram`. ### Зачем нужен nohang, если уже есть earlyoom? @@ -34,9 +34,9 @@ https://2ch.hk/s/res/2310304.html#2311483, https://archive.li/idixk ### Особенности - задача - препятствовать зависанию системы при нехватке доступной памяти, а также корректное завершение процессов с целью увеличения объема доступной памяти -- демон на Python 3, VmRSS около 12 MiB +- демон на Python 3, VmRSS около 12.8 MiB - требуется `Linux 3.14+` и `Python 3.4+` -- периодически проверяет размеры доступной памяти, при дефиците памяти отправляет `SIGKILL` или `SIGTERM` процессу с наибольшим `oom_score` +- периодически проверяет объем доступной памяти, при дефиците памяти отправляет `SIGKILL` или `SIGTERM` процессу с наибольшим `oom_score` - поддержка работы со `zram`, возможность реакции на `mem_used_total` - удобный конфиг с возможностью тонкой настройки - аргументы командной строки -h/--help и -c/--config @@ -101,6 +101,3 @@ sudo ./uninstall.sh ### Известные баги В рабочем алгоритме известных нет, если найдете - пишите в [Issues](https://github.com/hakavlad/nohang/issues). - - - diff --git a/nohang b/nohang index e1b2503..bf79d35 100755 --- a/nohang +++ b/nohang @@ -202,9 +202,6 @@ arg_config = parser.parse_args().config if arg_config is None: - # print('конфиг не задан через опцию -с/--config, берем его из дефолтных путей') - del arg_config - config = None for i in default_configs: if os.path.exists(i): @@ -216,8 +213,6 @@ if arg_config is None: else: - # print('через опцию задан путь к конфигу {}'.format(arg_config)) - if os.path.exists(arg_config): config = arg_config else: @@ -574,6 +569,13 @@ if print_config: + + + + + + + ########################################################################################### # - цикл проверки уровней доступной памяти