LINUX.ORG.RU

Выпуск Nohang v0.1 - демона, предотвращающего OOM в пространстве пользователя

 , ,


2

1

Nohang - это демон для GNU/Linux, обрабатывающий ситуации нехватки памяти и предотвращающий OOM. Код открыт под лицензией MIT. Написан на Python, потребляет около 10 MiB VmRSS и настраивается с помощью редактирования конфига, расположенного по адресу /etc/nohang/nohang.conf. По сравнению с аналогичным проектом earlyoom, nohang обладает некоторыми дополнительными возможностями.

Основные особенности:

  • настраиваемая интенсивность мониторинга: если на сервере не предполагаются резкие перепады потребления памяти, то можно снизить нагрузку на процессор, снизив интенсивность мониторинга;
  • при нехватке памяти nohang сначала отправляет SIGTERM процессу с наибольшим oom_score. При дальнейшем падении уровня доступной памяти и отсутствии реакции на SIGTERM процесс с наибольшим oom_score получает SIGKIL. Уровни доступной памяти, при достижении которых должны происходить корректирующие действия, могут задаваться в процентах и в MiB;
  • возможность GUI уведомлений о результатах завершения процессов (реализовано с помощью notify-send);
  • возможность GUI уведомлений о низком уровне доступной памяти: настраиваемость уровня памяти, при котором отправляются уведомления, и минимальная периодичность уведомлений (по умолчанию уведомления отключены; уровни памяти для отправки: одновременное снижение уровней SwapFree и MemAvailable до 20%; минимальный период между отправками уведомлений - 20 секунд). В уведомлениях отображается уровень доступной памяти, а также Pid и Name процесса с наибольшим badness;
  • поддержка zram - mem_used_total в качестве триггера (может быть актуально для систем с большим disksize и низкой степенью сжатия сохраняемых в zram данных);
  • предохранение от убийства невинных жертв: задержки после отправки сигналов (по умолчанию 0.5 секунд для SIGTERM и 3 секунды для SIGKILL) предотвращают возможное массовое убийство процессов, так как память при завершении процессов может освобождаться не сразу; возможность игнорировать процессы, имеющие badness ниже заданного;
  • возможность модификации badness процессов перед выбором жертвы через сопоставление имён процессов с заданным в конфиге регулярным выражением;
  • возможна настройка запуска произвольной команды (например, sendmail или systemctl restart) вместо отправки сигнала SIGTERM жертве, если имя процесса-жертвы совпадает с заданным в конфиге именем.

>>> Подробности

★★

Проверено: Shaman007 ()

Ответ на: комментарий от anonymous

А ещё так бывает, что рабочий набор данных не помещается в память физически, и никаким баг-репортом это не исправить,

Бывает. Но ты же понимаешь, что такое бывает намного реже, чем обыкновенный говнокод?

hobbit ★★★★★ ()
Ответ на: комментарий от user_id_68054

ты делаешь «не ядерный» OOM для того чтобы «ядерный» OOM не произошёл. но зачем же нужна эта «отзывчивость» если программа уже упала (от «не ядерного» OOM) :-) ..

В идеале упасть должна наименее полезная программа, освободив место для полезных.

hakavlad ★★ ()
Ответ на: комментарий от hobbit

Хочешь юзать кривые поделия криворуких кодеров, покупай оперативу, всё абсолютно логично. Не хочешь покупать оперативу, не юзай их поделия, ну или накрайняк поставь ulimit. А валить программы с помощью велосипедов — это феерический тупняк.

WitcherGeralt ★★ ()
Ответ на: комментарий от WitcherGeralt

А валить программы с помощью велосипедов — это феерический тупняк.

Без велосипеда все равно придет OOM, будут исчерпаны кэши, система подвиснет, жертва будет убита через SIGKILL. Мой велосипед смягчает негативные последствия и дает больший контроль. С ним лучше, чем без него.

hakavlad ★★ ()
Ответ на: комментарий от Nastishka

я лимит меньше поставил, на 5MB ничего не увидел.

anonymous ()
Ответ на: комментарий от Deleted

А есть причины оставаться на earlyoom? По идее oomd должен быть более качественным продуктом

Причина номер 1: oomd отсутствует в репах, требует странных зависимостей и патчинга ядра. Earlyoom уже есть в репах Ubuntu и AUR и может работать даже на древних ядрах, и хорошо работает из коробки.

hakavlad ★★ ()
Ответ на: комментарий от Nastishka

Пардон, работает, спасибо. Только протухает терминал если прога по лимиту вырубается, надо запускать отдельный баш, но это мелкая проблема.

bash -c «ulimit -v 5000; mpirun -np 20 ./test»

anonymous ()
Ответ на: комментарий от hakavlad

> А валить программы с помощью велосипедов — это феерический тупняк.

Без велосипеда все равно придет OOM, будут исчерпаны кэши, система подвиснет, жертва будет убита через SIGKILL. Мой велосипед смягчает негативные последствия и дает больший контроль. С ним лучше, чем без него.

а возможно OOM («ядерный») и не придёт :-) . быть может программа сумеет справится в условиях когда её раньше времени НЕ убивают.

так что фраза "Мой велосипед смягчает негативные последствия и дает больший контроль. С ним лучше, чем без него." актуальна например в ситуации если бы ты ТОЧНО ЗАРАНЕЕ знал бы что «будет» (would be) именно негативный исход.

а если программа НЕ собиралась доводить систему до «ядерного OOM»? то что получается твой велосипед получается убил её напрасно? как же тут можно говорить теперь "... С ним лучше, чем без него." ?

user_id_68054 ★★★★★ ()
Ответ на: комментарий от sT331h0rs3

Как справедливо заметили на опеннете, и тестов тоже нет никаких.

Замечу лишь, что наличие тестов не мешало earlyoom иметь кучу дурацких багов.

Nohang тщательно тестируется ручками. Данные, получаемые из конфига, проверяются на допустимые значения. Наличие или отсутствие тестов ничего не гарантирует.

hakavlad ★★ ()
Ответ на: комментарий от hakavlad

Nohang тщательно тестируется ручками. Данные, получаемые из конфига, проверяются на допустимые значения. Наличие или отсутствие тестов ничего не гарантирует.

Автоматические тесты эффективнее ручных, и при запуске имеют меньше ошибок человеческого фактора.

Наличие тестов, разумеется, увеличивает качество продукта, а не делает его сразу идеальным.

sT331h0rs3 ★★★★★ ()

Nohang - это демон для GNU/Linux, обрабатывающий ситуации нехватки памяти и предотвращающий OOM. Код открыт под лицензией MIT. Написан на Python

Прям эталонный пример сюрреализма.

Quasar ★★★★★ ()
Ответ на: комментарий от WitcherGeralt

Купите себе оперативы, достали уже.

Память-то дешёвая, да? Нужность сабжа это, конечно, не подтверждает, так как такой задачей должна заниматься базовая система, а не левый демон на python, берущий на себя полномочия штатного OOMKILLER.

Quasar ★★★★★ ()
Ответ на: комментарий от anonymous

Он тебе переусложнённое дерьмо предложил, как всегда systemd-фетишисты и делают. Под капотом там работа с cgroups. Как это делается, описано на куче сайтов, но принцип простой: создаётся группа через cgcreate, для которой ограничение ресурсов указывается, и через cgexec запускаются приложения с указанием этой группы. Можно те или иные запущенные процессы по группам раскидывать.

Quasar ★★★★★ ()
Ответ на: комментарий от WitcherGeralt

ulimit сделан для ограничения ресурсов пользователя, а не отдельно взятых процессов. Для данной задачи лучше использовать cgroups.

Quasar ★★★★★ ()
Ответ на: комментарий от hakavlad

Без велосипеда все равно придет OOM, будут исчерпаны кэши, система подвиснет, жертва будет убита через SIGKILL.

Разве настройка системы не позволяет это предотвратить?

Мой велосипед смягчает негативные последствия и дает больший контроль. С ним лучше, чем без него.

Твой велосипед не делает абсолютно ничего хорошего. Вообще. Тут уже несколько средств перечислили (которые к OOM никакого отношения не имеют, кстати), которые позволяют более прямо и эффективно решить данную задачу без велосипедов и костылей. Тебе следует прекратить разработку этого поделия и сконцентрироваться на изучении системы. Сабж наносит прямой вред.

Quasar ★★★★★ ()
Последнее исправление: Quasar (всего исправлений: 1)
Ответ на: комментарий от hakavlad

Замечу лишь, что наличие тестов не мешало earlyoom иметь кучу дурацких багов.

Проект earlyoom и иже с ним - э кучка дерьма от мудаков для мудаков. Не надо на таких ровняться.

Nohang тщательно тестируется ручками.

Это не исключает фактор предвзятости.

Quasar ★★★★★ ()
Ответ на: комментарий от anonymous

Какая-то плацебо васянка с из urandom набраными параметрами и значениями.

anonymous ()
Ответ на: комментарий от Quasar

ulimit сделан для ограничения ресурсов пользователя, а не отдельно взятых процессов.

У меня 2 Гбайт. А Debian лимитирует мне по умолчанию 16 Гбайт? ulimit -a

max locked memory (kbytes, -l) 16384 max memory size (kbytes, -m) unlimited virtual memory (kbytes, -v) unlimited

anonymous ()
Ответ на: комментарий от Quasar

Память-то дешёвая, да?

То, что она вдвое дороже чем два года назад, это досадно. Но какие ещё варианты? Если таким извращенцам существующие механизмы по ограничению памяти не заходят, то пусть уж лучше оперативы купят, чем очередной убиватор пишут.

WitcherGeralt ★★ ()
Ответ на: комментарий от WitcherGeralt

Ну и как ты оперативы в телефон купишь? У меня вот самсунг завис от хрома. Отмерз минут через десять...

AVL2 ★★★★★ ()
Ответ на: комментарий от vasya_pupkin

Вот это бы в ядро протащить!

Лабораторную работу на Python, которая парсит текстовые значения файлов /proc в само ядро?

Да вы, батенька, любитель кое-чего покрепче стандартных извращений!

EXL ★★★★★ ()
Ответ на: комментарий от anonymous

Не поможет. Своп ужасен с точки зрения производительности. И самое главное, гораздо проще прибить виновника, чтобы система ожила.

AVL2 ★★★★★ ()
Ответ на: комментарий от anonymous

Разумно, так и делаю. Но все равно памяти в телефонах сечас 4 гига. А желательно 32 гига, а это очень дорого пока.

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

Я про фф вообще ни слова не говорил. Если бы я его юзал и у меня возникали проблемы, я бы просто запретил ему жрать больше 3гб. Проблемы-то нет, средства прямо в ядре есть.

WitcherGeralt ★★ ()
Ответ на: комментарий от AVL2

На телефонах с более чем 1гб оперативы никогда проблем не возникало, памяти всегда хватало. Несколько лет ходил с телефонами с 2гб, хватало на всё. Хз чего там у тебя с хромом, но у меня из 4гб на текущем телефоне примерно половина всегда свободна.

WitcherGeralt ★★ ()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

А я играл в компьютер с двумя мегабайтами ОЗУ и что?

А на рынке норма была компьютеры с 1 мб ОЗУ.

и что?

времена другие, возможности другие.

AVL2 ★★★★★ ()
Ответ на: комментарий от WitcherGeralt

Хз чего там у тебя с хромом, но у меня из 4гб на текущем телефоне примерно половина всегда свободна.

ну вот об этом и речь, что когда норма, то половина свободна, а когда нет? Видос попер и скушал память. А параллельно математика считает. Кого убить? ООМ не знает, а демон в курсе...

AVL2 ★★★★★ ()
Ответ на: комментарий от anonymous

На ssd своп это убийство микросхемы. Замаялся из ноутов выпаивать этот ваш ssd ибо венда по 20 минут стартует...

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

На ssd своп это убийство микросхемы.

C 2013 года самые передовые ноутбуки компьютерной индустрии идут с SSD.

И как-то не жалуются. А у определённых личностей и в 2018 году какое-то больное мышление.

anonymous ()
Ответ на: комментарий от WitcherGeralt

То, что она вдвое дороже чем два года назад, это досадно. Но какие ещё варианты?

Если говорить про простой десктоп, то добавлять много памяти нерационально с точки зрения затрат. Если говорить про рабочую станцию, то там просто должно быть много памяти.

Если таким извращенцам существующие механизмы по ограничению памяти не заходят, то пусть уж лучше оперативы купят, чем очередной убиватор пишут

На простом десктопе достаточно лимиты выставить.

Quasar ★★★★★ ()
Ответ на: комментарий от WitcherGeralt

Это именно то, в каком направлении нужно развивать десктоп, а не всякие хреновые DE плодить вроде гнома 3, откуда только вырезают функциональность. Если подобные возможности дать пользователю легко и просто использовать на десктопе, то это будет реальное развитие, а не топтание на месте, которое уже десяток лет продолжается.

Quasar ★★★★★ ()

Выпуск Nohang ... демона

Зачем ты выпустил демона? Пробуждение Ктулху будет?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.