mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
100 lines
5.5 KiB
XML
100 lines
5.5 KiB
XML
<?xml version='1.0'?>
|
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
|
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
|
|
|
|
<refentry id="systemd-oomd.service" conditional='ENABLE_OOMD'>
|
|
|
|
<refentryinfo>
|
|
<title>systemd-oomd.service</title>
|
|
<productname>systemd</productname>
|
|
</refentryinfo>
|
|
|
|
<refmeta>
|
|
<refentrytitle>systemd-oomd.service</refentrytitle>
|
|
<manvolnum>8</manvolnum>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>systemd-oomd.service</refname>
|
|
<refname>systemd-oomd</refname>
|
|
<refpurpose>A userspace out-of-memory (OOM) killer</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<para><filename>systemd-oomd.service</filename></para>
|
|
<para><filename>/usr/lib/systemd/systemd-oomd</filename></para>
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1>
|
|
<title>Description</title>
|
|
|
|
<para><command>systemd-oomd</command> is a system service that uses cgroups-v2 and pressure stall information (PSI)
|
|
to monitor and take action on processes before an OOM occurs in kernel space.</para>
|
|
|
|
<para>You can enable monitoring and actions on units by setting <varname>ManagedOOMSwap=</varname> and/or
|
|
<varname>ManagedOOMMemoryPressure=</varname> to the appropriate value. <command>systemd-oomd</command> will
|
|
periodically poll enabled units' cgroup data to detect when corrective action needs to occur. When an action needs
|
|
to happen, it will only be performed on the descendant cgroups of the enabled units. More precisely, only cgroups with
|
|
<filename>memory.oom.group</filename> set to <constant>1</constant> and leaf cgroup nodes are eligible candidates.
|
|
Action will be taken recursively on all of the processes under the chosen candidate.</para>
|
|
|
|
<para>See
|
|
<citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
|
for more information about the configuration of this service.</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Setup Information</title>
|
|
|
|
<para>The system must be running systemd with a full unified cgroup hierarchy for the expected cgroups-v2 features.
|
|
Furthermore, memory accounting must be turned on for all units monitored by <command>systemd-oomd</command>.
|
|
The easiest way to turn on memory accounting is by ensuring the value for <varname>DefaultMemoryAccounting=</varname>
|
|
is set to <constant>true</constant> in
|
|
<citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
|
|
|
|
<para>You will need a kernel compiled with PSI support. This is available in Linux 4.20 and above.</para>
|
|
|
|
<para>It is highly recommended for the system to have swap enabled for <command>systemd-oomd</command> to function
|
|
optimally. With swap enabled, the system spends enough time swapping pages to let <command>systemd-oomd</command> react.
|
|
Without swap, the system enters a livelocked state much more quickly and may prevent <command>systemd-oomd</command>
|
|
from responding in a reasonable amount of time. See
|
|
<ulink url="https://chrisdown.name/2018/01/02/in-defence-of-swap.html">"In defence of swap: common misconceptions"</ulink>
|
|
for more details on swap. Any swap-based actions on systems without swap will be ignored. While
|
|
<command>systemd-oomd</command> can perform pressure-based actions on a system without swap, the pressure increases
|
|
will be more abrupt and may require more tuning to get the desired thresholds and behavior.</para>
|
|
|
|
<para>Be aware that if you intend to enable monitoring and actions on <filename>user.slice</filename>,
|
|
<filename>user-$UID.slice</filename>, or their ancestor cgroups, it is highly recommended that your programs be
|
|
managed by the systemd user manager to prevent running too many processes under the same session scope (and thus
|
|
avoid a situation where memory intensive tasks trigger <command>systemd-oomd</command> to kill everything under the
|
|
cgroup). If you're using a desktop environment like GNOME, it already spawns many session components with the
|
|
systemd user manager.</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Usage Recommendations</title>
|
|
|
|
<para><varname>ManagedOOMSwap=</varname> works with the system-wide swap values, so setting it on the root slice
|
|
<filename>-.slice</filename>, and allowing all descendant cgroups to be eligible candidates may make the most
|
|
sense.</para>
|
|
|
|
<para><varname>ManagedOOMMemoryPressure=</varname> tends to work better on the cgroups below the root slice
|
|
<filename>-.slice</filename>. For units which tend to have processes that are less latency sensitive (e.g.
|
|
<filename>system.slice</filename>), a higher limit like the default of 60% may be acceptable, as those processes
|
|
can usually ride out slowdowns caused by lack of memory without serious consequences. However, something like
|
|
<filename>user@$UID.service</filename> may prefer a much lower value like 40%.</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>See Also</title>
|
|
<para>
|
|
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
|
<citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
<citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
|
<citerefentry><refentrytitle>oomctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
|
</para>
|
|
</refsect1>
|
|
</refentry>
|