This commit is contained in:
Alexey Avramov 2018-12-10 09:10:35 +09:00
parent 842ea7be35
commit 9a270f102c
2 changed files with 243 additions and 12 deletions

View File

@ -121,7 +121,7 @@ oom_score_adj_max = 30
#####################################################################
4. Impact on the badness of processes via matching their names
with regular expressions (using re.search()).
and cmdlines with regular expressions using re.search().
See https://en.wikipedia.org/wiki/Regular_expression and
https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions
@ -129,7 +129,8 @@ oom_score_adj_max = 30
Enabling this option slows down the search for the victim
because the names or cmdlines of all processes
(except init and kthreads) are compared with the
specified regex patterns.
specified regex patterns (in fact slowing down is caused by
reading all /proc/*/cmdline and /proc/*/status files).
Valid values are True and False.
@ -139,11 +140,11 @@ regex_matching = False
be calculated by the following formula:
badness = (oom_score + 1) * prefer_factor
Matching with process names
RE pattern must not be empty!
prefer_regex = /usr/bin...
Matching with process names
prefer_regex = foo
Valid values are floating-point numbers from the range [1; 1000].
@ -310,4 +311,3 @@ print_mem_check_results = False
print_sleep_periods = False

View File

@ -1,14 +1,55 @@
This is nohang config file (deafault values backup)
This is nohang config file.
Lines starting with #, tabs and spaces are comments.
The configuration includes the following sections:
1. Memory levels to respond to as an OOM threat
2. The frequency of checking the level of available memory
(and CPU usage)
3. The prevention of killing innocent victims
4. Impact on the badness of processes via matching their names
with regular expressions
5. The execution of a specific command instead of sending the
SIGTERM signal
6. GUI notifications:
- OOM prevention results and
- low memory warnings
7. Preventing the slowing down of the program
8. Output verbosity
Just read the description of the parameters and edit the values.
Please restart the program after editing the config.
#####################################################################
1. Memory levels to respond to as an OOM threat
1. Thresholds below which a signal should be sent to the victim
Sets the available memory levels at or below which SIGTERM or SIGKILL
signals are sent. The signal will be sent if MemAvailable and
SwapFree (in /proc/meminfo) at the same time will drop below the
corresponding values. Can be specified in % (percent) and M (MiB).
Valid values are floating-point numbers from the range [0; 100] %.
MemAvailable levels.
mem_min_sigterm = 10 %
mem_min_sigkill = 5 %
SwapFree levels.
swap_min_sigterm = 10 %
swap_min_sigkill = 5 %
Specifying the total share of zram in memory, if exceeded the
corresponding signals are sent. As the share of zram in memory
increases, it may fall responsiveness of the system. 90 % is a
usual hang level, not recommended to set very high.
Can be specified in % and M. Valid values are floating-point
numbers from the range [0; 100] %.
zram_max_sigterm = 50 %
zram_max_sigkill = 55 %
@ -17,66 +58,256 @@ zram_max_sigkill = 55 %
2. The frequency of checking the amount of available memory
(and CPU usage)
Coefficients that affect the intensity of monitoring. Reducing
the coefficients can reduce CPU usage and increase the periods
between memory checks.
Why three coefficients instead of one? Because the swap fill rate
is usually lower than the RAM fill rate.
It is possible to set a lower intensity of monitoring for swap
without compromising to prevent OOM and thus reduce the CPU load.
Default values are well for desktop. On servers without rapid
fluctuations in memory levels the values can be reduced.
Valid values are positive floating-point numbers.
rate_mem = 6
rate_swap = 3
rate_zram = 1
See also https://github.com/rfjakob/earlyoom/issues/61
#####################################################################
3. The prevention of killing innocent victims
Минимальное значение oom_score, которым должен обладать
процесс для того, чтобы ему был отправлен сигнал.
Позволяет предотвратить убийство невиновных если что-то
пойдет не так.
Valid values are integers from the range [0; 1000].
min_badness = 10
Минимальная задержка после отправки соответствующих сигналов
для предотвращения риска убийства сразу множества процессов.
Valid values are non-negative floating-point numbers.
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 перед поиском жертвы.
Enabling the option requires root privileges.
Valid values are True and False.
Values are case sensitive.
decrease_oom_score_adj = False
Valid values are integers from the range [0; 1000].
oom_score_adj_max = 30
#####################################################################
4. Impact on the badness of processes via matching their names
with regular expressions.
and cmdlines with regular expressions using re.search().
See https://en.wikipedia.org/wiki/Regular_expression and
https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions
Enabling this option slows down the search for the victim
because the names or cmdlines of all processes
(except init and kthreads) are compared with the
specified regex patterns (in fact slowing down is caused by
reading all /proc/*/cmdline and /proc/*/status files).
Valid values are True and False.
regex_matching = False
prefer_regex = tail|python3
Badness of processes whose names correspond to prefer_regex will
be calculated by the following formula:
badness = (oom_score + 1) * prefer_factor
RE pattern must not be empty!
Matching with process names
prefer_regex = foo
Valid values are floating-point numbers from the range [1; 1000].
prefer_factor = 3
avoid_regex = Xorg|sshd
Badness of processes whose names correspond to avoid_regex will
be calculated by the following formula:
badness = oom_score / avoid_factor
# Need more examples
avoid_regex = ^(sshd|Xorg)$
Valid values are floating-point numbers from the range [1; 1000].
avoid_factor = 3
Matching with cmdlines
prefer_re_cmdline = ^/usr/lib/firefox
avoid_re_cmdline = ^/usr/lib/virtualbox
prefer_cmd_factor = 3
avoid_cmd_factor = 3
#####################################################################
5. The execution of a specific command instead of sending the
SIGTERM signal.
For processes with a specific name you can specify a command to
run instead of sending the SIGTERM signal.
For example, if the process is running as a daemon, you can run
the restart command instead of sending SIGTERM.
Valid values are True and False.
execute_the_command = False
The length of the process name can't exceed 15 characters.
The syntax is as follows: lines starting with keyword $ETC are
considered as the lines containing names of processes and
corresponding commands. After a name of process the triple slash
(///) follows. And then follows the command that will be
executed if the specified process is selected as a victim. The
ampersand (&) at the end of the command will allow nohang to
continue runing without waiting for the end of the command
execution.
For example:
$ETC mysqld /// systemctl restart mariadb.service &
$ETC php-fpm7.0 /// systemctl restart php7.0-fpm.service
$ETC name /// some command
#####################################################################
6. GUI notifications:
- results of preventing OOM
- OOM prevention results and
- low memory warnings
Включение этой опции требует наличия notify-send в системе.
В Debian/Ubuntu это обеспечивается установкой пакета
libnotify-bin. В Fedora и Arch Linux - пакет libnotify.
Также требуется наличие сервера уведомлений.
При запуске nohang от рута уведомления рассылаются всем
залогиненным пользователям.
See also wiki.archlinux.org/index.php/Desktop_notifications
Valid values are True and False.
gui_notifications = False
Enable GUI notifications about the low level of available memory.
Valid values are True and False.
gui_low_memory_warnings = False
Минимальное время между отправками уведомлений в секундах.
Valid values are floating-point numbers from the range [1; 300].
min_time_between_warnings = 20
Если значения MemAvailable и SwapFree одновременно будут ниже
соотвестствующих значений, то будут отправлены уведомления.
Can be specified in % (percent) and M (MiB).
Valid values are floating-point numbers from the range [0; 100] %.
mem_min_warnings = 20 %
swap_min_warnings = 20 %
Если доля zram в памяти превысит значение zram_max_warnings,
то будут отправляться уведомления с минимальным периодом равным
min_time_between_warnings.
zram_max_warnings = 40 %
Ampersands (&) will be replaced with asterisks (*) in process
names and in commands.
#####################################################################
7. Preventing the slowing down of the program
mlockall() lock ... all of the calling process's virtual address
space into RAM, preventing that memory from being paged to the
swap area. - `man mlockall`
It is disabled by default because the value mlockall = True in
Fedora 28 causes the process to increase memory consumption by
200 MiB. On Debian 8 and 9 there is no such problem.
mlockall = False
Установка отрицательных значений niceness и oom_score_adj
требует наличия root прав.
Установка отрицательного niceness повышает приоритет процесса.
Valid values are integers from the range [-20; 19].
niceness = -9
Set oom_score_adj for the nohang process.
Valid values are integers from the range [-1000; 1000].
Setting the values to -1000 will prohibit suicide.
oom_score_adj = -50
Read `man ionice` to understand the following parameters.
Setting the True value requires the root privileges.
realtime_ionice = False
'For realtime and best-effort, 0-7 are valid data
(priority levels), and 0 represents the highest priority level.'
- `man ionice`
Valid values are integers from the range [0; 7].
realtime_ionice_classdata = 4
#####################################################################
8. Output verbosity
Display the configuration when the program starts.
Valid values are True and False.
print_config = False
Print memory check results or not print.
Valid values are True and False.
print_mem_check_results = False
Print sleep periods between memory checks or not print.
Valid values are True and False.
print_sleep_periods = False