nohang - Man Page

A sophisticated low memory handler

Synopsis

nohang [OPTION]...

Description

nohang is a highly configurable daemon for Linux which is able to correctly prevent out of memory (OOM) and keep system responsiveness in low memory conditions.

Requirements

For basic usage

  • Linux (>= 3.14, since MemAvailable appeared in /proc/meminfo)
  • Python (>= 3.3)

To respond to PSI metrics (optional)

  • Linux (>= 4.20) with CONFIG_PSI=y

To show GUI notifications (optional)

  • notification server (most of desktop environments use their own implementations)
  • libnotify (Arch Linux, Fedora, openSUSE) or libnotify-bin (Debian GNU/Linux, Ubuntu)
  • sudo if nohang started with UID=0.

Command-Line Options

-h, --help

show this help message and exit

-v, --version

show version of installed package and exit

-m, --memload

consume memory until 40 MiB (MemAvailable + SwapFree) remain free, and terminate the process

-c CONFIG, --config CONFIG

path to the config file. This should only be used with one of the following options: --monitor, --tasks, --check

--check

check and show the configuration and exit. This should only be used with -c/--config CONFIG option

--monitor

start monitoring. This should only be used with -c/--config CONFIG option

--tasks

show tasks state and exit. This should only be used with -c/--config CONFIG option

Files

/etc/nohang/nohang.conf

path to vanilla nohang configuration file

/etc/nohang/nohang-desktop.conf

path to configuration file with settings optimized for desktop usage

/usr/share/nohang/nohang.conf

path to file with default nohang.conf values

/usr/share/nohang/nohang-desktop.conf

path to file with default nohang-desktop.conf values

/var/log/nohang/nohang.log

optional log file that stores entries if separate_log=True in the config

/etc/logrotate.d/nohang

logrotate config file that controls rotation in /var/log/nohang/

nohang.conf vs nohang-desktop.conf

Problems

The next problems can occur with out-of-tree kernels and modules:

How to Configure

The program can be configured by editing the config file. The configuration includes the following sections:

Just read the description of the parameters and edit the values. Restart the daemon to apply the changes.

Check Config

Check the config for errors:

$ nohang --check --config /path/to/config

How to Test

The safest way is to run nohang --memload. This causes memory consumption, and the process will exits before OOM occurs. Another way is to run tail /dev/zero. This causes fast memory comsumption and causes OOM at the end. If testing occurs while nohang is running, these processes should be terminated before OOM occurs.

Logging

To view the latest entries in the log (for systemd users):

$ sudo journalctl -eu nohang.service

or

$ sudo journalctl -eu nohang-desktop.service

You can also enable separate_log in the config to logging in /var/log/nohang/nohang.log.

Signals

Sending SIGTERM, SIGINT, SIGQUIT or SIGHUP signals to the nohang process causes it displays corrective action stats and exits.

Reporting Bugs

Please ask any questions and report bugs at <https://github.com/hakavlad/nohang/issues>.

Author

Written by Alexey Avramov <hakavlad@gmail.com>.

Homepage

Homepage is <https://github.com/hakavlad/nohang>.

See Also

oom-sort(1), psi-top(1), psi2log(1)

Notes

  1. https://github.com/openzfs/zfs/issues/10255
  2. https://github.com/rfjakob/earlyoom/pull/191#issuecomment-622314296
  3. https://github.com/hakavlad/nohang/issues/89
  4. https://github.com/hakavlad/nohang/issues/25#issuecomment-521390412

Referenced By

oom-sort(1), psi2log(1), psi-top(1).

Linux System Administrator's Manual