SHA256
1
0
forked from pool/earlyoom

Accepting request 891234 from home:dimstar:Factory

- Package pre-built earlyoom.1 as pandoc / haskell is not supported
  on all archs.
- Drop pandoc BuildRequires.

OBS-URL: https://build.opensuse.org/request/show/891234
OBS-URL: https://build.opensuse.org/package/show/Base:System/earlyoom?expand=0&rev=33
This commit is contained in:
Mindaugas Baranauskas 2021-05-07 09:04:37 +00:00 committed by Git OBS Bridge
parent 5716a5e474
commit 5c4fe8639d
3 changed files with 226 additions and 3 deletions

210
earlyoom.1 Normal file
View File

@ -0,0 +1,210 @@
.\" Automatically generated by Pandoc 2.13
.\"
.TH "earlyoom" "1" "" "" "General Commands Manual"
.hy
.SH NAME
.PP
earlyoom - Early OOM Daemon
.SH SYNOPSIS
.PP
\f[B]earlyoom\f[R] [\f[B]OPTION\f[R]]\&...
.SH DESCRIPTION
.PP
The oom-killer generally has a bad reputation among Linux users.
One may have to sit in front of an unresponsive system, listening to the
grinding disk for minutes, and press the reset button to quickly get
back to what one was doing after running out of patience.
.PP
\f[B]earlyoom\f[R] checks the amount of available memory and free swap
up to 10 times a second (less often if there is a lot of free memory).
If \f[B]both\f[R] memory \f[B]and\f[R] swap are below 10%, it will kill
the largest process (highest \f[C]oom_score\f[R]).
The percentage value is configurable via command line arguments.
.PP
If there is a failure when trying to kill a process, \f[B]earlyoom\f[R]
sleeps for 1 second to limit log spam due to recurring errors.
.SH OPTIONS
.SS -m PERCENT[,KILL_PERCENT]
.PP
set available memory minimum to PERCENT of total (default 10 %).
.PP
earlyoom starts sending SIGTERM once \f[B]both\f[R] memory \f[B]and\f[R]
swap are below their respective PERCENT setting.
It sends SIGKILL once \f[B]both\f[R] are below their respective
KILL_PERCENT setting (default PERCENT/2).
.PP
Use the same value for PERCENT and KILL_PERCENT if you always want to
use SIGKILL.
.PP
Examples:
.IP
.nf
\f[C]
earlyoom # sets PERCENT=10, KILL_PERCENT=5
earlyoom -m 30 # sets PERCENT=30, KILL_PERCENT=15
earlyoom -m 20,18 # sets PERCENT=20, KILL_PERCENT=18
\f[R]
.fi
.SS -s PERCENT[,KILL_PERCENT]
.PP
set free swap minimum to PERCENT of total (default 10 %).
Send SIGKILL if at or below KILL_PERCENT (default PERCENT/2), otherwise
SIGTERM.
.PP
You can use \f[C]-s 100\f[R] to have earlyoom effectively ignore swap
usage: Processes are killed once available memory drops below the
configured minimum, no matter how much swap is free.
.PP
Use the same value for PERCENT and KILL_PERCENT if you always want to
use SIGKILL.
.SS -M SIZE[,KILL_SIZE]
.PP
As an alternative to specifying a percentage of total memory,
\f[C]-M\f[R] sets the available memory minimum to SIZE KiB.
The value is internally converted to a percentage.
If you pass both \f[C]-M\f[R] and \f[C]-m\f[R], the lower value is used.
Example: Reserve 10% of RAM but at most 1 GiB:
.IP
.nf
\f[C]
earlyoom -m 10 -M 1048576
\f[R]
.fi
.PP
earlyoom sends SIGKILL if at or below KILL_SIZE (default SIZE/2),
otherwise SIGTERM.
.SS -S SIZE[,KILL_SIZE]
.PP
As an alternative to specifying a percentage of total swap, \f[C]-S\f[R]
sets the free swap minimum to SIZE KiB.
The value is internally converted to a percentage.
If you pass both \f[C]-S\f[R] and \f[C]-s\f[R], the lower value is used.
.PP
Send SIGKILL if at or below KILL_SIZE (default SIZE/2), otherwise
SIGTERM.
.SS -k
.PP
removed in earlyoom v1.2, ignored for compatibility
.SS -i
.PP
user-space oom killer should ignore positive oom_score_adj values
.SS -d
.PP
enable debugging messages
.SS -v
.PP
print version information and exit
.SS -r INTERVAL
.PP
Time between printing periodic memory reports, in seconds (default 1.0).
A memory report looks like this:
.IP
.nf
\f[C]
mem avail: 21790 of 23909 MiB (91.14%), swap free: 0 of 0 MiB ( 0.00%)
\f[R]
.fi
.PP
Set to 3600 to print a report every hour, to 86400 to print once a day
etc.
Set to 0 to disable printing periodic memory reports.
Free memory monitoring and low-memory killing runs independently of this
option at an adaptive poll rate that only depends on free memory.
Due to the adaptive poll rate, when there is a lot of free memory, the
actual interval may be up to 1 second longer than the setting.
.SS -p
.PP
Increase earlyoom\[cq]s priority: set niceness of earlyoom to -20 and
oom_score_adj to -100.
.PP
When earlyoom is run through its default systemd service, the
\f[C]-p\f[R] switch doesn\[cq]t work.
To achieve the same effect, enter the following three lines into
\f[C]sudo systemctl edit earlyoom\f[R]:
.IP
.nf
\f[C]
[Service]
OOMScoreAdjust=-100
Nice=-20
\f[R]
.fi
.SS -n
.PP
Enable notifications via d-bus.
.SS --prefer REGEX
.PP
prefer killing processes matching REGEX (adds 300 to oom_score)
.SS --avoid REGEX
.PP
avoid killing processes matching REGEX (subtracts 300 from oom_score)
.SS --dryrun
.PP
dry run (do not kill any processes)
.SS -h, --help
.PP
this help text
.SH EXIT STATUS
.PP
0: Successful program execution.
.PP
1: Other error - inspect message for details
.PP
2: Switch conflict.
.PP
4: Could not cd to /proc
.PP
5: Could not open proc
.PP
7: Could not open /proc/sysrq-trigger
.PP
13: Unknown options.
.PP
14: Wrong parameters for other options.
.PP
15: Wrong parameters for memory threshold.
.PP
16: Wrong parameters for swap threshold.
.PP
102: Could not open /proc/meminfo
.PP
103: Could not read /proc/meminfo
.PP
104: Could not find a specific entry in /proc/meminfo
.PP
105: Could not convert number when parse the contents of /proc/meminfo
.SH Why not trigger the kernel oom killer?
.PP
Earlyoom does not use \f[C]echo f > /proc/sysrq-trigger\f[R] because the
Chrome people made their browser always be the first (innocent!) victim
by setting \f[C]oom_score_adj\f[R] very high.
Instead, earlyoom finds out itself by reading through
\f[C]/proc/*/status\f[R] (actually \f[C]/proc/*/statm\f[R], which
contains the same information but is easier to parse programmatically).
.PP
Additionally, in recent kernels (tested on 4.0.5), triggering the kernel
oom killer manually may not work at all.
That is, it may only free some graphics memory (that will be allocated
immediately again) and not actually kill any process.
.SH MEMORY USAGE
.PP
About 2 MiB VmRSS.
All memory is locked using mlockall() to make sure earlyoom does not
slow down in low memory situations.
.SH BUGS
.PP
If there is zero total swap on earlyoom startup, any \f[C]-S\f[R]
(uppercase \[lq]S\[rq]) values are ignored, a warning is printed, and
default swap percentages are used.
.PP
For processes matched by \f[C]--prefer\f[R], negative
\f[C]oom_score_adj\f[R] values are not taken into account, and the
process gets an effective \f[C]oom_score\f[R] of at least 300.
See https://github.com/rfjakob/earlyoom/issues/159 for details.
.SH AUTHOR
.PP
The author of earlyoom is Jakob Unterwurzacher
\[la]jakobunt\[at]gmail.com\[ra].
.PP
This manual page was written by Yangfl \[la]mmyangfl\[at]gmail.com\[ra],
for the Debian project (and may be used by others).

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Fri May 7 08:35:39 UTC 2021 - Dominique Leuenberger <dimstar@opensuse.org>
- Package pre-built earlyoom.1 as pandoc / haskell is not supported
on all archs.
- Drop pandoc BuildRequires.
-------------------------------------------------------------------
Thu Dec 3 14:12:54 UTC 2020 - Dan Čermák <dcermak@suse.com>

View File

@ -1,7 +1,7 @@
#
# spec file for package earlyoom
#
# Copyright (c) 2020 SUSE LLC
# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -30,8 +30,8 @@ Group: System/Daemons
URL: https://github.com/rfjakob/%{name}
Source0: %{URL}/archive/v%{version}.tar.gz
Source11: %{name}.sysconfig
# pandoc only for `pandoc MANPAGE.md -s -t man > earlyoom.1`
BuildRequires: pandoc
# Inject pre-build earlyoom.1, built on x86_64 machine, as pandoc does not exist on all archs
Source12: earlyoom.1
BuildRequires: pkgconfig
BuildRequires: pkgconfig(systemd)
Conflicts: oomd
@ -45,6 +45,10 @@ below critical level, it will kill the largest process (highest oom_score).
%prep
%autosetup
# Test if our pre-build earloom.1 is newer than README.md; if not, fail
# in case of fail, rebuild the earlyoom.1 out of the build system using
# pandoc MANPAGE.md -s -t man > earlyoom.1
test %{SOURCE12} -nt README.md
# Fix defaults file location
sed -i 's|/default/|/sysconfig/|' earlyoom.service.in
@ -71,6 +75,8 @@ LDFLAGS="-lrt ${RPM_LD_FLAGS}"
%install
%make_install PREFIX=%{_prefix} SYSTEMDUNITDIR=%{_unitdir}
install -D -m644 %{SOURCE11} %{buildroot}%{_fillupdir}/sysconfig.%{name}
install -d %{buildroot}%{_mandir}/man1/
install -m644 %{SOURCE12} %{buildroot}%{_mandir}/man1/
mkdir -p %{buildroot}%{_sbindir}
ln -sf service %{buildroot}%{_sbindir}/rc%{name}