This is nohang config file. Lines starting with #, tabs and spaces are comments. Lines starting with @ contain optional parameters. All values are case sensitive. Be careful: nohang doesn't forbid you to shoot yourself in the foot. The configuration includes the following sections: 1. Common zram settings 2. Common PSI settings 3. Poll rate 4. Warnings and notifications 5. Soft threshold 6. Hard threshold 7. Customize victim selection: adjusting badness of processes 8. Customize soft corrective actions 9. Misc settings 10. Verbosity, debug, logging Just read the description of the parameters and edit the values. Please restart the program after editing the config. TODO: improve descriptions ############################################################################### 1. Common zram settings Key: zram_checking_enabled Description: Type: boolean Valid values: True | False Default value: False zram_checking_enabled = False ############################################################################### 2. Common PSI settings Key: psi_checking_enabled Description: Type: boolean Valid values: True | False Default value: False psi_checking_enabled = False Key: psi_path Description: Type: string Valid values: any string Default value: /proc/pressure/memory psi_path = /proc/pressure/memory Key: psi_metrics Description: Type: string Valid values: some_avg10, some_avg60, some_avg300, full_avg10, full_avg60, full_avg300 Default value: some_avg10 psi_metrics = some_avg10 Key: psi_excess_duration Description: Type: float Valid values: >= 0 Default value: 30 psi_excess_duration = 30 Key: psi_post_action_delay Description: Type: float Valid values: >= 10 Default value: 20 psi_post_action_delay = 20 ############################################################################### 3. Poll rate Key: fill_rate_mem Description: Type: float Valid values: >= 100 Default value: 6000 fill_rate_mem = 6000 Key: fill_rate_swap Description: Type: float Valid values: >= 100 Default value: 2000 fill_rate_swap = 2000 Key: fill_rate_zram Description: Type: float Valid values: >= 100 Default value: 4000 fill_rate_zram = 4000 Key: max_sleep Description: Type: float Valid values: >= 0.01 and >= min_sleep Default value: 3 max_sleep = 3 Key: min_sleep Description: Type: float Valid values: >= 0.01 and <= max_sleep Default value: 0.1 min_sleep = 0.1 ############################################################################### 4. Warnings and notifications 4.1. GUI notifications after corrective actions Key: post_action_gui_notifications Description: Type: boolean Valid values: True | False Default value: False post_action_gui_notifications = True Key: hide_corrective_action_type Description: Type: boolean Valid values: True | False Default value: False hide_corrective_action_type = False 4.2. Low memory warnings Key: low_memory_warnings_enabled Description: Type: boolean Valid values: True | False Default value: False low_memory_warnings_enabled = True Key: warning_exe Description: Type: string Valid values: any string Default value: (empty string) warning_exe = Key: warning_threshold_min_mem Description: Type: float (with % or M) Valid values: from the range [0; 100] % Default value: 20 % warning_threshold_min_mem = 20 % Key: warning_threshold_min_swap Description: Type: float (with % or M) Valid values: [0; 100] % or >= 0 M Default value: 20 % warning_threshold_min_swap = 25 % Key: warning_threshold_max_zram Description: Type: float (with % or M) Valid values: from the range [0; 100] % Default value: 45 % warning_threshold_max_zram = 45 % Key: warning_threshold_max_psi Description: Type: float Valid values: from the range [0; 100] Default value: 10 warning_threshold_max_psi = 10 Key: min_post_warning_delay Description: Type: float Valid values: >= 1 Default value: 60 min_post_warning_delay = 60 Key: env_cache_time Description: Type: float Valid values: >= 0 Default value: 300 env_cache_time = 300 ############################################################################### 5. Soft threshold (thresholds for sending the SIGTERM signal or implementing other soft corrective action) Key: soft_threshold_min_mem Description: Type: float (with % or M) Valid values: from the range [0; 50] % Default value: 5 % soft_threshold_min_mem = 7 % Key: soft_threshold_min_swap Description: Type: float (with % or M) Valid values: [0; 100] % or >= 0 M Default value: 10 % soft_threshold_min_swap = 14 % Key: soft_threshold_max_zram Description: Type: float (with % or M) Valid values: from the range [10; 90] % Default value: 55 % soft_threshold_max_zram = 55 % Key: soft_threshold_max_psi Description: Type: float Valid values: from the range [5; 100] Default value: 40 soft_threshold_max_psi = 40 ############################################################################### 6. Hard threshold (thresholds for sending the SIGKILL signal) Key: hard_threshold_min_mem Description: Type: float (with % or M) Valid values: from the range [0; 50] % Default value: 2 % hard_threshold_min_mem = 2 % Key: hard_threshold_min_swap Description: Type: float (with % or M) Valid values: [0; 100] % or >= 0 M Default value: 4 % hard_threshold_min_swap = 4 % Key: hard_threshold_max_zram Description: Type: float (with % or M) Valid values: from the range [10; 90] % Default value: 60 % hard_threshold_max_zram = 60 % Key: hard_threshold_max_psi Description: Type: float Valid values: from the range [5; 100] Default value: 90 hard_threshold_max_psi = 90 ############################################################################### 7. Customize victim selection: adjusting badness of processes 7.1. Ignore positive oom_score_adj Key: ignore_positive_oom_score_adj Description: Type: boolean Valid values: True | False Default value: False ignore_positive_oom_score_adj = False 7.2.1. Matching process names with RE patterns change their badness Syntax: @BADNESS_ADJ_RE_NAME badness_adj /// RE_pattern New badness value will be += badness_adj It is possible to compare multiple patterns with different badness_adj values. Example: @BADNESS_ADJ_RE_NAME 200 /// ^Web Content$ 7.2.2. Matching CGroup_v1-line with RE patterns @BADNESS_ADJ_RE_CGROUP_V1 -50 /// ^/system\.slice/ @BADNESS_ADJ_RE_CGROUP_V1 50 /// /foo\.service$ @BADNESS_ADJ_RE_CGROUP_V1 -50 /// ^/user\.slice/ 7.2.3. Matching CGroup_v2-line with RE patterns @BADNESS_ADJ_RE_CGROUP_V2 100 /// ^/workload 7.2.4. Matching eUIDs with RE patterns @BADNESS_ADJ_RE_UID -100 /// ^0$ 7.2.5. Matching /proc/[pid]/exe realpath with RE patterns Example: @BADNESS_ADJ_RE_REALPATH 900 /// ^(/usr/bin/stress|/usr/bin/stress-ng)$ 7.2.6. Matching cwd with RE patterns @BADNESS_ADJ_RE_CWD 200 /// ^/home/ 7.2.7. Matching cmdlines with RE patterns WARNING: using this option can greatly slow down the search for a victim in conditions of heavily swapping. Prefer Chromium tabs and Electron-based apps @BADNESS_ADJ_RE_CMDLINE 200 /// --type=renderer Prefer Firefox tabs (Web Content and WebExtensions) @BADNESS_ADJ_RE_CMDLINE 100 /// -appomni @BADNESS_ADJ_RE_CMDLINE -200 /// ^/usr/lib/virtualbox 7.2.8. Matching environ with RE patterns WARNING: using this option can greatly slow down the search for a victim in conditions of heavy swapping. @BADNESS_ADJ_RE_ENVIRON 100 /// USER=user Note that you can control badness also via systemd units via OOMScoreAdjust, see www.freedesktop.org/software/systemd/man/systemd.exec.html#OOMScoreAdjust= ############################################################################### 8. Customize soft corrective actions Run the command instead of sending a signal with at soft corrective action if the victim's name or cgroup matches the regular expression. Syntax: KEY REGEXP SEPARATOR COMMAND @SOFT_ACTION_RE_NAME ^foo$ /// kill -USR1 $PID @SOFT_ACTION_RE_CGROUP_V1 ^/system\.slice/ /// systemctl restart $SERVICE @SOFT_ACTION_RE_CGROUP_V2 /foo\.service$ /// systemctl restart $SERVICE $PID will be replaced by process PID. $NAME will be replaced by process name. $SERVICE will be replaced by .service if it exists (overwise it will be relpaced by empty line) ############################################################################### 9. Misc settings Key: max_soft_exit_time Description: Type: float Valid values: >= 0.1 Default value: 10 max_soft_exit_time = 10 Key: post_kill_exe Description: Type: string Valid values: any string Default value: (empty string) post_kill_exe = Key: min_badness Description: Type: integer Valid values: >= 1 Default value: 1 min_badness = 1 Key: post_soft_action_delay Description: Type: float Valid values: >= 0.1 Default value: 3 post_soft_action_delay = 3 Key: post_zombie_delay Description: Type: float Valid values: >= 0 Default value: 0.1 post_zombie_delay = 0.1 Key: victim_cache_time Description: Type: float Valid values: >= 0 Default value: 10 victim_cache_time = 10 Key: exe_timeout Description: Type: float Valid values: >= 0.1 Default value: 20 exe_timeout = 20 ############################################################################### 10. Verbosity, debug, logging Key: print_config_at_startup Description: Type: boolean Valid values: True | False Default value: False print_config_at_startup = False Key: print_mem_check_results Description: Type: boolean Valid values: True | False Default value: False print_mem_check_results = False Key: min_mem_report_interval Description: Type: float Valid values: >= 0 Default value: 60 min_mem_report_interval = 60 Key: print_proc_table Description: Type: boolean Valid values: True | False Default value: False print_proc_table = False Key: extra_table_info Description: WARNING: using "cmdline" or "environ" keys can greatly slow down the search for a victim in conditions of heavy swapping. Type: string Valid values: None, cgroup_v1, cgroup_v2, realpath, cwd, cmdline, environ Default value: None extra_table_info = None Key: print_victim_status Description: Type: boolean Valid values: True | False Default value: True print_victim_status = True Key: print_victim_cmdline Description: Type: boolean Valid values: True | False Default value: False print_victim_cmdline = False Key: max_victim_ancestry_depth Description: Type: integer Valid values: >= 1 Default value: 3 max_victim_ancestry_depth = 3 Key: print_statistics Description: Type: boolean Valid values: True | False Default value: True print_statistics = True Key: debug_psi Description: Type: boolean Valid values: True | False Default value: False debug_psi = False Key: debug_gui_notifications Description: Type: boolean Valid values: True | False Default value: False debug_gui_notifications = False Key: debug_sleep Description: Type: boolean Valid values: True | False Default value: False debug_sleep = False Key: debug_threading Description: Type: boolean Valid values: True | False Default value: False debug_threading = False Key: separate_log Description: Type: boolean Valid values: True | False Default value: False separate_log = False ############################################################################### Use cases, feature requests and any questions are welcome: https://github.com/hakavlad/nohang/issues