mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-22 13:33:56 +03:00
oomd: notify via dbus what have been killed
This commit is contained in:
parent
7238fd51d4
commit
d784a8d474
@ -39,6 +39,9 @@ node /org/freedesktop/oom1 {
|
|||||||
interface org.freedesktop.oom1.Manager {
|
interface org.freedesktop.oom1.Manager {
|
||||||
methods:
|
methods:
|
||||||
DumpByFileDescriptor(out h fd);
|
DumpByFileDescriptor(out h fd);
|
||||||
|
signals:
|
||||||
|
Killed(s cgroup,
|
||||||
|
s reason);
|
||||||
};
|
};
|
||||||
interface org.freedesktop.DBus.Peer { ... };
|
interface org.freedesktop.DBus.Peer { ... };
|
||||||
interface org.freedesktop.DBus.Introspectable { ... };
|
interface org.freedesktop.DBus.Introspectable { ... };
|
||||||
@ -56,12 +59,38 @@ node /org/freedesktop/oom1 {
|
|||||||
|
|
||||||
<variablelist class="dbus-method" generated="True" extra-ref="DumpByFileDescriptor()"/>
|
<variablelist class="dbus-method" generated="True" extra-ref="DumpByFileDescriptor()"/>
|
||||||
|
|
||||||
|
<variablelist class="dbus-signal" generated="True" extra-ref="Killed"/>
|
||||||
|
|
||||||
<!--End of Autogenerated section-->
|
<!--End of Autogenerated section-->
|
||||||
|
|
||||||
<refsect2>
|
<refsect2>
|
||||||
<title>Methods</title>
|
<title>Methods</title>
|
||||||
|
|
||||||
<para>...</para>
|
<para><function>Killed</function> signal is sent when any cgroup is killed by oomd.</para>
|
||||||
|
<para>Note that more reasons will be added in the future, and the table below will be expanded accordingly.</para>
|
||||||
|
<table>
|
||||||
|
<title>Killing reasons</title>
|
||||||
|
<tgroup cols="2" align="left" colsep="1" rowsep="1">
|
||||||
|
<colspec colname="reason"/>
|
||||||
|
<colspec colname="description"/>
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Reason</entry>
|
||||||
|
<entry>Description</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>memory-used</entry>
|
||||||
|
<entry>Application took too much memory and swap.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>memory-pressure</entry>
|
||||||
|
<entry>Application took enough memory and swap to cause sufficient slowdown of other applications.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
</refsect2>
|
</refsect2>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
|
@ -38,6 +38,11 @@ static const sd_bus_vtable manager_vtable[] = {
|
|||||||
SD_BUS_PARAM(fd),
|
SD_BUS_PARAM(fd),
|
||||||
bus_method_dump_by_fd,
|
bus_method_dump_by_fd,
|
||||||
SD_BUS_VTABLE_UNPRIVILEGED),
|
SD_BUS_VTABLE_UNPRIVILEGED),
|
||||||
|
SD_BUS_SIGNAL_WITH_NAMES("Killed",
|
||||||
|
"ss",
|
||||||
|
SD_BUS_PARAM(cgroup)
|
||||||
|
SD_BUS_PARAM(reason),
|
||||||
|
0),
|
||||||
SD_BUS_VTABLE_END
|
SD_BUS_VTABLE_END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -410,7 +410,7 @@ static int monitor_swap_contexts_handler(sd_event_source *s, uint64_t usec, void
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_notice_errno(r, "Failed to kill any cgroup(s) based on swap: %m");
|
log_notice_errno(r, "Failed to kill any cgroup(s) based on swap: %m");
|
||||||
else {
|
else {
|
||||||
if (selected && r > 0)
|
if (selected && r > 0) {
|
||||||
log_notice("Killed %s due to memory used (%"PRIu64") / total (%"PRIu64") and "
|
log_notice("Killed %s due to memory used (%"PRIu64") / total (%"PRIu64") and "
|
||||||
"swap used (%"PRIu64") / total (%"PRIu64") being more than "
|
"swap used (%"PRIu64") / total (%"PRIu64") being more than "
|
||||||
PERMYRIAD_AS_PERCENT_FORMAT_STR,
|
PERMYRIAD_AS_PERCENT_FORMAT_STR,
|
||||||
@ -418,6 +418,16 @@ static int monitor_swap_contexts_handler(sd_event_source *s, uint64_t usec, void
|
|||||||
m->system_context.mem_used, m->system_context.mem_total,
|
m->system_context.mem_used, m->system_context.mem_total,
|
||||||
m->system_context.swap_used, m->system_context.swap_total,
|
m->system_context.swap_used, m->system_context.swap_total,
|
||||||
PERMYRIAD_AS_PERCENT_FORMAT_VAL(m->swap_used_limit_permyriad));
|
PERMYRIAD_AS_PERCENT_FORMAT_VAL(m->swap_used_limit_permyriad));
|
||||||
|
|
||||||
|
/* send dbus signal */
|
||||||
|
(void) sd_bus_emit_signal(m->bus,
|
||||||
|
"/org/freedesktop/oom1",
|
||||||
|
"org.freedesktop.oom1.Manager",
|
||||||
|
"Killed",
|
||||||
|
"ss",
|
||||||
|
selected,
|
||||||
|
"memory-used");
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -524,13 +534,23 @@ static int monitor_memory_pressure_contexts_handler(sd_event_source *s, uint64_t
|
|||||||
* it. In either case, go through the event loop again and select a new candidate if
|
* it. In either case, go through the event loop again and select a new candidate if
|
||||||
* pressure is still high. */
|
* pressure is still high. */
|
||||||
m->mem_pressure_post_action_delay_start = usec_now;
|
m->mem_pressure_post_action_delay_start = usec_now;
|
||||||
if (selected && r > 0)
|
if (selected && r > 0) {
|
||||||
log_notice("Killed %s due to memory pressure for %s being %lu.%02lu%% > %lu.%02lu%%"
|
log_notice("Killed %s due to memory pressure for %s being %lu.%02lu%% > %lu.%02lu%%"
|
||||||
" for > %s with reclaim activity",
|
" for > %s with reclaim activity",
|
||||||
selected, t->path,
|
selected, t->path,
|
||||||
LOADAVG_INT_SIDE(t->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(t->memory_pressure.avg10),
|
LOADAVG_INT_SIDE(t->memory_pressure.avg10), LOADAVG_DECIMAL_SIDE(t->memory_pressure.avg10),
|
||||||
LOADAVG_INT_SIDE(t->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(t->mem_pressure_limit),
|
LOADAVG_INT_SIDE(t->mem_pressure_limit), LOADAVG_DECIMAL_SIDE(t->mem_pressure_limit),
|
||||||
FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
|
FORMAT_TIMESPAN(m->default_mem_pressure_duration_usec, USEC_PER_SEC));
|
||||||
|
|
||||||
|
/* send dbus signal */
|
||||||
|
(void) sd_bus_emit_signal(m->bus,
|
||||||
|
"/org/freedesktop/oom1",
|
||||||
|
"org.freedesktop.oom1.Manager",
|
||||||
|
"Killed",
|
||||||
|
"ss",
|
||||||
|
selected,
|
||||||
|
"memory-pressure");
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user