Выпуск обработчика нехватки памяти earlyoom 1.4

После восьми месяцев разработки опубликован выпуск фонового процесса earlyoom 1.4, который периодически проверяет объем доступной памяти (MemAvailable, SwapFree) и пытается на ранней стадии отреагировать на возникновения нехватки памяти. Код проекта написан на языке Си и распространяется под лицензий MIT.

Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGTERM или SIGKILL) завершит работу процесса, наиболее активно потребляющего память (имеющего самое большое значение /proc/*/oom_score), не доводя состояние системы до очистки системных буферов и мешающего работе своппинга (обработчик OOM (Out Of Memory) в ядре срабатывает когда состояние нехватки памяти уже достигло критичных значений и обычно к этому моменту система уже не реагирует на действия пользователя).

Earlyoom поддерживает отправку уведомлений о принудительно завершённых процессах на рабочий стол (с помощью notify-send), а также предоставляет возможность определения правил, в которых при помощи регулярных выражений можно задать имена процессов, завершение которых предпочтительно (опция «—prefer») или остановки которых стоит избегать (опция «—avoid»).

Основные изменения в новом выпуске:

  • За счёт отложенной загрузки атрибутов процессов на 50% ускорена логика выбора процессов для завершения;
  • Обеспечено отражение в логе UID завершаемого процесса, в дополнение к PID и имени процесса;
  • Добавлена подсветка отладочного лога светло серым цветом;
  • Проведена чистка кода;
  • По возможности использовано объявление локальных для блоков переменных;
  • Добавлена настройка PATH_LEN для замены вшитого в код значения размера буфера;
  • Обеспечен запуск cppcheck при его наличии;
  • Добавлен тест производительности «make bench»;
  • Расширен набор тестов (make test);
  • Реализован сброс привилегий root в unit-файле systemd earlyoom.service. Это изменение ломает возможность GUI уведомлений. Для включения GUI уведомлений предлагается вернуть root права, раскомментировав «DynamicUser=true». Отключение root также приводит к невозможности получения сведений о потреблении памяти при монтировании /proc в режиме hidepid=1 или hidepid=2.

Источник: opennet.ru