308 lines
14 KiB
Plaintext
308 lines
14 KiB
Plaintext
|
||
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 &
|