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

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

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

  • Настраиваемая интенсивность мониторинга: если на сервере не предполагаются резкие перепады потребления памяти, то можно снизить нагрузку на процессор, снизив интенсивность мониторинга;
  • При нехватке памяти nohang сначала отправляет SIGTERM процессу с наибольшим oom_score. При дальнейшем падении уровня доступной памяти и отсутствии реакции на SIGTERM процесс с наибольшим oom_score получает SIGKILL. Уровни доступной памяти, при достижении которых должны происходить корректирующие действия, могут задаваться в процентах и в MiB;
  • Возможность отправки GUI уведомлений о результатах завершения процессов (реализовано с помощью notify-send);
  • Возможность отправки GUI уведомлений о низком уровне доступной памяти. В уведомлениях отображается уровень доступной памяти, а также Pid и имя процесса с наибольшим коэффициентом «badness». Предоставляется возможность настойки уровня памяти, при котором отправляются уведомления, и минимальной периодичности отправки уведомлений (по умолчанию уведомления отключены). Рекомендуемые по умолчанию уровни памяти для отправки: одновременное снижение уровней SwapFree и MemAvailable до 20%;

  • Поддержка zram — mem_used_total в качестве триггера (может быть актуально для систем с большим размером хранилища (disksize) и низкой степенью сжатия сохраняемых в zram данных);
  • Предохранение от убийства невинных процессов: задержки после отправки сигналов (по умолчанию 0.5 секунд для SIGTERM и 3 секунды для SIGKILL) предотвращают возможное массовое убийство процессов, так как память при завершении процессов может освобождаться не сразу. Имеется возможность игнорировать процессы, имеющие коэффициент «badness» ниже заданного;
  • Возможность модификации «badness» процессов перед выбором жертвы через сопоставление имён процессов с заданным в конфигурации регулярным выражением;
  • Поддержка настройки запуска произвольной команды (например, sendmail или systemctl restart) вместо отправки сигнала SIGTERM жертве, если имя процесса-жертвы совпадает с заданным в конфигурации именем.

Добавить комментарий

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.