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:
parent
5716a5e474
commit
5c4fe8639d
210
earlyoom.1
Normal file
210
earlyoom.1
Normal 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).
|
@ -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>
|
||||
|
||||
|
@ -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}
|
||||
|
Loading…
x
Reference in New Issue
Block a user