nohang/nohang.conf

308 lines
14 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Nohang config file
Комментариями являются строки, начинающиеся с решёток, пробелов
и табуляций. Инлайновые комментарии запрещены.
Пробелы допустимы внутри строк в любом количестве.
Все параметры, кроме строковых (display, notify_options,
*list_regex), проходят проверку на допустимые значения.
#####################################################################
I. STANDARD OUTPUT VERBOSITY
Печатать параметров конфига при запуске программы.
Допустимые значения: True и False
print_config = True
Печатать ли результаты измерения доступной памяти.
Допустимые значения: True и False
print_mem_check_results = True
Печатать ли время сна между проверками памяти и после отправки
сигналов. Можно установить в значение True для дебага.
Допустимые значения: True и False
print_sleep_periods = False
#####################################################################
II. SELF-DEFENSE
True - заблокировать процесс в памяти для запрета его своппинга.
False - не блокировать. Значения чувствительны к регистру!
В Fedora 28 значение True вызывает увеличение потребления
памяти процессом на 200 MiB, в Debian 8 и 9 такой проблемы нет.
mlockall = True
Установка отрицательных значений self_nice и self_oom_score_adj
требует наличия root прав.
Установка отрицательного self_nice повышает приоритет процесса.
Допустимые значения - целые числа из диапазона [-20; 19]
self_nice = -15
Задать oom_score_adj для процесса.
Установка значения -1000 запретит самоубийство.
Допустимые значения - целые числа из диапазона [-1000; 1000]
self_oom_score_adj = -1000
#####################################################################
III. MONITORING INTENSITY
Коэффициенты, влияющие на интенсивность мониторинга.
Допустимыми значениями являются положительные числа.
Уменьшение коэффициентов способно снизить нагрузку на
прцессор и увеличить периоды между проверками памяти.
Почему три коэффициента, а не один? - Потому что скорость
наполнения свопа обычно ниже скорости наполнения RAM.
Можно для свопа задать более низкую интенсивность
мониторинга без ущерба для предотвращения нехватки памяти
и тем самым снизить нагрузку на процессор.
В дефолтных настройках на данной интенсивности демон работает
достаточно хорошо, успешно справляясь с резкими скачками потребления
памяти.
rate_mem = 6
rate_swap = 3
rate_zram = 1
#####################################################################
IV. THRESHOLDS FOR SENDING SIGNALS
Задание уровней доступной памяти, ниже которых происходит
отправка сигналов SIGTERM или SIGKILL.
Сигнал отправляется если MemAvailable и SwapFree одновременно
опустятся ниже соответствующих значений.
Значения могут быть выражены в процентах (%) и мебибайтах (M)
Диапазон допустимых значений - от 0 до 100 %.
mem_min_sigterm = 8 %
mem_min_sigkill = 4 %
swap_min_sigterm = 50 %
swap_min_sigkill = 20 %
Задание общей доли zram в памяти, при превышении которой
происходит отправка соответствующих сигналов.
Экспериментально удалось добиться доли зрам в 95%, при которой
система виснет или запускается OOM killer.
По мере увеличения доли zram в памяти может падать
отзывчивость системы.
Может также задаваться в % и M.
Диапазон допустимых значений - от 0 до 100% (90% - это обычно
уровень зависания или срабатывания OOM killer'a)
zram_max_sigterm = 55 %
zram_max_sigkill = 60 %
#####################################################################
V. PREVENTION OF KILLING INNOCENT VICTIMS
Минимальное значение oom_score, которым должен обладать
процесс для того, чтобы ему был отправлен сигнал.
Позволяет предотвратить убийство невиновных если что-то
пойдет не так.
Значение должно быть целым числом из диапазона [0; 1000]
Может min_badness с учетом списков?
oom_score_min = 20
Минимальная задержка после отправки соответствующих сигналов
для предотвращения риска убийства сразу множества процессов.
Должно быть неотрицательным числом.
min_delay_after_sigterm = 0.5
min_delay_after_sigkill = 3
Процессы браузера chromium обычно имеют oom_score_adj
200 или 300. Это приводит к тому, что процессы хрома умирают
первыми вместо действительно тяжелых процессов.
Если параметр decrease_oom_score_adj установлен
в значение True, то у процессов, имеющих oom_score_adj выше
oom_score_adj_max значение oom_score_adj будет опущено
до oom_score_adj_max перед поиском жертвы.
False - не изменять oom_score_adj процессов перед поиском
жертвы. Значения чувствительны к регистру!
Требует root прав.
decrease_oom_score_adj = True
Допустимые значения - целые числа из диапазона [0; 1000]
oom_score_adj_max = 20
#####################################################################
VI. DESKTOP NOTIFICATIONS
Эта возможность требует наличия notify-send в системе.
В Debian/Ubuntu это обеспечивается установкой пакета
libnotify-bin. В Fedora и Arch Linux - пакет libnotify.
Также требуется наличие сервера уведомлений.
При запуске nohang от рута уведомления рассылаются всем
залогиненным пользователям.
See also wiki.archlinux.org/index.php/Desktop_notifications
Допустимые значения: True и False
desktop_notifications = True
Дополнительные опции для notify-send.
См. notify-send --help и man notify-send
Примеры:
notify_options = -u "critical"
notify_options = -t "20000" -i "dialog-warning"
notify_options =
Переменая окружения $DISPLAY, передаваемая notify-send при
запуске nohang с uid = 0.
Должен совпадать с выводом
$ echo $DISPLAY
root_display = :0
#####################################################################
VII. BLACK, WHITE, AVOID AND PREFER LISTS
Можно задать регулярные выражения (Perl-compatible regular
expressions), которые будут использоваться для сопоставления с
именами процессов для влияния на их badness.
Включение этой опции замедляет поиск жертвы, так как
имена всех процессов сравниваются с заданными regex-паттернами.
use_regex_lists = False
Приоритет списков (если один процесс находится одновременно в
нескольких):
1. whitelist_regex: сначала пропуск процессов из белого списка;
2. blacklist_regex: отправка сигнала всем из черного списка;
3. preferlist_regex и avoidlist_regex: умножение или деление
oom_score на соответствующие факторы.
Процессы, имена которых соответствуют выражению
whitelist_regex, не получат сигнал.
Регулярное выражение для формирования белого списка.
whitelist_regex = Xorg|sshd
При нехватке памяти все процессы, имена которых соответствуют
blacklist_regex, получат сигнал.
blacklist_regex =
Badness процессов, имена которых соответствуют preferlist_regex,
будут рассчитываться по формуле
badness = (oom_score + 1) * preferlist_factor
preferlist_regex = tail|python3
Диапазон допустимых значений: [1; 1000]
preferlist_factor = 3
Список нежелательных для убийства процессов.
Badness процессов, имена которых соответствуют avoidlist_regex,
будут рассчитываться по формуле
badness = oom_score / avoidlist_factor
avoidlist_regex =
Диапазон допустимых значений: [1; 1000]
avoidlist_factor = 3
#####################################################################
VIII. LOGGING
В лог записывается дата, объемы доступной памяти и ход
предотвращения OOM.
Valid values are True and False.
logging = True
logfile = /var/log/nohang/nohang.log
#####################################################################
IX. LOW MEMORY WARNINGS
Десктопные уведомления о низком уровне доступной памяти.
Для работы опции должны быть включены десктопные уведомления.
Возможно стоит этот раздел объединить с DESKTOP NOTIFICATIONS.
Valid values are True and False.
low_memory_warnings = True
Минимальное время между отправками уведомлений в секундах.
Должно быть в диапазоне [1; 300].
min_time_between_warnings = 20
Уровни MemAvailable и SwapFree одновременно будут ниже
соотвестствующих значений, то будут отправлены уведомления.
Могут быть выражены в процентах (%) и мебибайтах (M).
mem_min_warnings = 20 %
swap_min_warnings = 20%
Если доля zram в памяти превысит значение zram_max_warnings,
то будут отправляться уведомления с минимальным периодом
min_time_between_warnings.
zram_max_warnings = 40 %
#####################################################################
X. EXECUTE THE COMMAND INSTEAD OF SENDING THE SIGTERM SIGNAL
Для процессов с определенным именем можно задать команду,
которая будет выполняться вместо отправки сигнала SIGTERM
процессу с соответствующим именем.
Например, если процесс запущен как демон, то вместо
отправки SIGTERM можно выполнить команду перезапуска.
Допустимые значения: True и False.
execute_the_command = False
Длина имени процесса не должна превышать 15 символов.
Синтаксис таков: строки, начинающиеся с **, считаются строками,
содержащими имена процессов и соотвестствующие команды для
перезапуска этих процессов. После имени процесса через двойное
двоеточие (::) следует команда.
Например:
** mysqld :: systemctl restart mariadb.service &
** php-fpm7.0 :: systemctl restart php7.0-fpm.service &
Амперсанд (&) в конце команды позволит nohang продолжить работу
не дожидаясь окончания выполнения команды.
** processname :: some command &