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