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 ()

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

времена другие

Не такие уж и другие, у меня в 2008 году топовый ПК был с 4гб оперативы, это совсем недавно было.

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

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

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

Линукс тормозит от окончания памяти, а не от сваппинга. Со свопом наоборот лучше выходит, тк тормоза ничинаются позже.

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

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

О чём я и говорю.

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

Заеди отдельный мелкий и дешёвый ssd под своп. Тк свап гораздо меньше его полного обьёма, за счёт ротации контроллером ячеек он должен прожить довольно долго.

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

Конечно лучше его валить.

Весь комп покупается ради приложений. Если приложению нужно 100% ресурсов, то отдай ему их! А если оно валит комп, пристрели его и либо наращивай ресурсы, либо мирись с этой ситуацией.

Система «у меня есть ресурсы, они лежат мертвым грузом но я их тебе не дам» очень странная и недальновидная.

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

«Своп ужасен с точки зрения производительности, но он помогает.»

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

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

Дело в том, что часть ресурсов нужны для работы самой системы с драйверами. Потому говорят неторым помогает наоборот отнять у приложений часть памяти, выставив vm/min_free_kbytes больше стандартного.

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

Что тебе мешает дать процессу по максимуму ресурсов, но ровно столько, чтобы он не валил систему? У тебя проблемы с логикой. Тебе нужно чтобы приложение работало, при этом нельзя его ограничить, но можно валить, лол.

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

ну факт. У меня на ютубе бывает забудешь браузер, он через пару дней все доступное ОЗУ хавает.

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

Да, потому что приложения конечные.

Бывает так, что оно ставит колом систему, но мне все равно надо, чтобы оно работало. А браузер мне не критичен. Есть ресурсы - бери. Нет - умри.

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

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

А то! :)

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

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

Что я только что прочитал? :)

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

Я не нашёл спеков для i100, но для u100 tbw 15tb. i100 гораздо более бюджетная модель для кэширования, сандиск, видимо, туда ставил совсем шлак. Ну и, плюс к тому, я не видел ничего про обновления прошивки. А для очень многих ssd, по поему опыту, слежение за выходом новой прошивки и очень своевременная её прошивка - крайне нужная процедура.

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

Я не нашёл спеков для i100

Да, быстро дохнущее то самое для кэширования. Причём легко не снимаемое.

И весь их этот кэширующий софт благополучно сдох с выходом Windows 10. Тот случай, когда ломающее что-то при обновлении пошло на благо пользователям :D

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

Система «у меня есть ресурсы, они лежат мертвым грузом но я их тебе не дам» очень странная и недальновидная.

Ресурсы заняты страничным кэшем, а не лежат.

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

ЗАчем мне страничный кеш? Мне нужно отдать ресурсы приложению. Ради него комп и работает.

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

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

неторым помогает наоборот отнять у приложений часть памяти, выставив vm/min_free_kbytes больше стандартного

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

При отсутствии свопа его вообще можно обнулить, это увеличит доступную память.

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

Ну так оставь одно ядро и перезагрузись.

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

всё начинает валиться

У меня ничего не валилось, например.

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

Тогда уж лучше своп на диске как крайнюю меру и zswap для сжатия того, что писать на диск пока рано.

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

Возможно, а может быть это ты запутался в том, что есть цель, а что средство...

AVL2 ★★★★★ ()

Приятно иметь возможность установить такую утилиту, если понадобится. Спасибо автору за его работу!

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

От своппинга линукс действительно не тормозит. Тормозит система на базе линукса от оверсвоппинга, когда данных так много, что диск не успевает своевременно их принимать и отдавать. Это тут часто путали с давно исправленным 12309. Самое простое решение - отключить своп. Посложнее - настроить параметры свопа. Решение поинтереснее: сделать своп небольшим.

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

Нафига заводить железку под своп, которая от него гарантированно сдохнет? Лучше оперативной памяти докупить, чем SSD. Помнится нечто подобное мелкософт предлагал с флешками делать. Все ржали над этими дебилами.

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

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

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

Одно другому совершенно не мешает. Можно заранее, можно потом. И далеко не всегда понятно, а какие собственно ресурсы для нее нормальны, а какие нет. Например, ардоур вообще отказывается работать с лимитами. Еще раз, если приложение даже подвесило систему, то из этого положения два выхода - либо смириться, либо убивать и этот выбор может сделать только человек. Или демон от его имени в соответствии с конфигом. Никаакие лимиты и слепой ООМ тут не помогут.

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

Приятно иметь возможность установить такую утилиту

Наверно ты один такой, кому приятно. Костыли ненужны.

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

Костыли были б не нужны, если б ядро не имело переломов в виде плохо настраиваемого OOM killer'а. В данном случае костыли компенсируют плохую обработку OOM ядром. Здоровому человеку костыли, конечно, не нужны. Больному - очень даже нужны.

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

Как минимум еще автору приятно иметь. Более того, я так понимаю, ему этот костыль оказался нужен (раз он его написал).

Вообще, как пригорит - мне будет очень приятно, что кто-то такую утилиту написал. Если есть костыли, которые легко решают мою проблему, то я лучше их использую, чем буду сам демонов писать или, боже упаси, в ядро лезть (unless it is fun).

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