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

good-penguin.png

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 жертве, если имя процесса-жертвы совпадает с заданным в конфиге именем.

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

©  Linux.org.ru