or the restart rate limit is reached. See the <literal>RestartMode=</literal> section in
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for more details.</para>
+
+ <para><varname>OOMKills</varname> contains a different value depending on whether
+ <varname>OOMPolicy=kill</varname> is enabled for the unit or not. If enabled, the property contains the
+ number of times the kernel OOM killer killed all the processes in the unit's cgroup and its
+ descendant cgroups. If disabled, the property contains the number of processes the kernel OOM killer
+ has killed in the unit's cgroup and its descendant cgroups.</para>
+
+ <para><varname>ManagedOOMKills</varname> contains the number of times <command>systemd-oomd</command>
+ killed all the processes in the unit's cgroup and its descendant cgroups.</para>
</refsect2>
<refsect2>
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t IOWriteOperations = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t OOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t ManagedOOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b Delegate = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly as DelegateControllers = ['...', ...];
<variablelist class="dbus-property" generated="True" extra-ref="IOWriteOperations"/>
+ <variablelist class="dbus-property" generated="True" extra-ref="OOMKills"/>
+
+ <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMKills"/>
+
<variablelist class="dbus-property" generated="True" extra-ref="Delegate"/>
<variablelist class="dbus-property" generated="True" extra-ref="DelegateControllers"/>
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t IOWriteOperations = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t OOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t ManagedOOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b Delegate = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly as DelegateControllers = ['...', ...];
<variablelist class="dbus-property" generated="True" extra-ref="IOWriteOperations"/>
+ <variablelist class="dbus-property" generated="True" extra-ref="OOMKills"/>
+
+ <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMKills"/>
+
<variablelist class="dbus-property" generated="True" extra-ref="Delegate"/>
<variablelist class="dbus-property" generated="True" extra-ref="DelegateControllers"/>
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t IOWriteOperations = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t OOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t ManagedOOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b Delegate = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly as DelegateControllers = ['...', ...];
<variablelist class="dbus-property" generated="True" extra-ref="IOWriteOperations"/>
+ <variablelist class="dbus-property" generated="True" extra-ref="OOMKills"/>
+
+ <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMKills"/>
+
<variablelist class="dbus-property" generated="True" extra-ref="Delegate"/>
<variablelist class="dbus-property" generated="True" extra-ref="DelegateControllers"/>
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t IOWriteOperations = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t OOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t ManagedOOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b Delegate = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly as DelegateControllers = ['...', ...];
<variablelist class="dbus-property" generated="True" extra-ref="IOWriteOperations"/>
+ <variablelist class="dbus-property" generated="True" extra-ref="OOMKills"/>
+
+ <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMKills"/>
+
<variablelist class="dbus-property" generated="True" extra-ref="Delegate"/>
<variablelist class="dbus-property" generated="True" extra-ref="DelegateControllers"/>
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t IOWriteOperations = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t OOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t ManagedOOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b Delegate = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly as DelegateControllers = ['...', ...];
<variablelist class="dbus-property" generated="True" extra-ref="IOWriteOperations"/>
+ <variablelist class="dbus-property" generated="True" extra-ref="OOMKills"/>
+
+ <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMKills"/>
+
<variablelist class="dbus-property" generated="True" extra-ref="Delegate"/>
<variablelist class="dbus-property" generated="True" extra-ref="DelegateControllers"/>
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t IOWriteOperations = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t OOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+ readonly t ManagedOOMKills = ...;
+ @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b Delegate = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly as DelegateControllers = ['...', ...];
<variablelist class="dbus-property" generated="True" extra-ref="IOWriteOperations"/>
+ <variablelist class="dbus-property" generated="True" extra-ref="OOMKills"/>
+
+ <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMKills"/>
+
<variablelist class="dbus-property" generated="True" extra-ref="Delegate"/>
<variablelist class="dbus-property" generated="True" extra-ref="DelegateControllers"/>
<varname>LogsDirectoryQuotaUsage</varname>,
<varname>LogsDirectoryAccounting</varname>, and
<function>KillSubgroup()</function> were added in version 258.</para>
+ <para><varname>OOMKills</varname>, and
+ <varname>ManagedOOMKills</varname> were added in 259.</para>
</refsect2>
<refsect2>
<title>Socket Unit Objects</title>
<varname>LogsDirectoryQuotaUsage</varname>,
<varname>LogsDirectoryAccounting</varname>, and
<function>KillSubgroup()</function> were added in version 258.</para>
+ <para><varname>OOMKills</varname>, and
+ <varname>ManagedOOMKills</varname> were added in 259.</para>
</refsect2>
<refsect2>
<title>Mount Unit Objects</title>
<varname>LogsDirectoryQuotaUsage</varname>,
<varname>LogsDirectoryAccounting</varname>, and
<function>KillSubgroup()</function> were added in version 258.</para>
+ <para><varname>OOMKills</varname>, and
+ <varname>ManagedOOMKills</varname> were added in 259.</para>
</refsect2>
<refsect2>
<title>Swap Unit Objects</title>
<varname>LogsDirectoryQuotaUsage</varname>,
<varname>LogsDirectoryAccounting</varname>, and
<function>KillSubgroup()</function> were added in version 258.</para>
+ <para><varname>OOMKills</varname>, and
+ <varname>ManagedOOMKills</varname> were added in 259.</para>
</refsect2>
<refsect2>
<title>Slice Unit Objects</title>
<varname>NCurrentlyActive</varname>,
<function>RemoveSubgroup()</function>, and
<function>KillSubgroup()</function> were added in version 258.</para>
+ <para><varname>OOMKills</varname>, and
+ <varname>ManagedOOMKills</varname> were added in 259.</para>
</refsect2>
<refsect2>
<title>Scope Unit Objects</title>
<para><varname>ManagedOOMMemoryPressureDurationUSec</varname> was added in version 257.</para>
<para><function>RemoveSubgroup()</function> and
<function>KillSubgroup()</function> were added in version 258.</para>
+ <para><varname>OOMKills</varname>, and
+ <varname>ManagedOOMKills</varname> were added in 259.</para>
</refsect2>
<refsect2>
<title>Job Objects</title>
return sd_bus_message_append(reply, "t", crt ? crt->cgroup_id : UINT64_C(0));
}
+static int property_get_oom_kills(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ Unit *u = ASSERT_PTR(userdata);
+
+ assert(bus);
+ assert(reply);
+
+ CGroupRuntime *crt = unit_get_cgroup_runtime(u);
+ return sd_bus_message_append(reply, "t", crt ? crt->oom_kill_last : UINT64_MAX);
+}
+
+static int property_get_managed_oom_kills(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ Unit *u = ASSERT_PTR(userdata);
+
+ assert(bus);
+ assert(reply);
+
+ CGroupRuntime *crt = unit_get_cgroup_runtime(u);
+ return sd_bus_message_append(reply, "t", crt ? crt->managed_oom_kill_last : UINT64_MAX);
+}
+
static int append_process(sd_bus_message *reply, const char *p, PidRef *pid, Set *pids) {
_cleanup_free_ char *buf = NULL, *cmdline = NULL;
int r;
SD_BUS_PROPERTY("IOReadOperations", "t", property_get_io_counter, 0, 0),
SD_BUS_PROPERTY("IOWriteBytes", "t", property_get_io_counter, 0, 0),
SD_BUS_PROPERTY("IOWriteOperations", "t", property_get_io_counter, 0, 0),
+ SD_BUS_PROPERTY("OOMKills", "t", property_get_oom_kills, 0, 0),
+ SD_BUS_PROPERTY("ManagedOOMKills", "t", property_get_managed_oom_kills, 0, 0),
SD_BUS_METHOD_WITH_ARGS("GetProcesses",
SD_BUS_NO_ARGS,