698723
From 8bdc512d2651b4600f7e744b06633a7524b64346 Mon Sep 17 00:00:00 2001
698723
From: Lennart Poettering <lennart@poettering.net>
698723
Date: Mon, 12 Oct 2020 16:31:42 +0200
698723
Subject: [PATCH] sysctl: set kernel.core_pipe_limit=16
698723
698723
We need to make sure that our coredump pattern handler manages to read
698723
process metadata from /proc/$PID/ before the kernel reaps the crashed
698723
process. By default the kernel will reap the process as soon as it can.
698723
By setting kernel.core_pipe_limit to a non-zero the kernel will wait for
698723
userspace to finish before reaping.
698723
698723
We'll set the value to 16, which allows 16 crashes to be
698723
processed in parallel. This matches the MaxConnections= setting in
698723
systemd-coredump.socket.
698723
698723
See: #17301
698723
698723
(This doesn't close 17301, since we probably should also gracefully
698723
handle if /proc/$PID/ vanished already while our coredump handler runs,
698723
just in case people loclly set the sysctl back to zero. i.e. we should
698723
collect what we can and rather issue an incomplete log record than
698723
none.)
698723
698723
(cherry picked from commit 2a9b9323cd844baae3229e9dba67e478bee70654)
698723
698723
Resolves: #1949729
698723
---
698723
 sysctl.d/50-coredump.conf.in | 11 +++++++++++
698723
 1 file changed, 11 insertions(+)
698723
698723
diff --git a/sysctl.d/50-coredump.conf.in b/sysctl.d/50-coredump.conf.in
698723
index ccd5c2cc56..8d6fbb718c 100644
698723
--- a/sysctl.d/50-coredump.conf.in
698723
+++ b/sysctl.d/50-coredump.conf.in
698723
@@ -10,3 +10,14 @@
698723
 # setting below.
698723
 
698723
 kernel.core_pattern=|@rootlibexecdir@/systemd-coredump %P %u %g %s %t %c %h %e
698723
+
698723
+# Allow that 16 coredumps are dispatched in parallel by the kernel. We want to
698723
+# be able to collect process metadata from /proc/%P/ while processing
698723
+# coredumps, and thus need to make sure the crashed processes are not reaped
698723
+# until we finished collecting what we need. The kernel default for this sysctl
698723
+# is "0" which means the kernel doesn't wait for userspace processes to finish
698723
+# processing before reaping the crashed processes — by setting this higher the
698723
+# kernel will delay reaping until we are done, but only for the specified
698723
+# number of crashes in parallel. The value of 16 is chosen to match
698723
+# systemd-coredump.socket's MaxConnections= value.
698723
+kernel.core_pipe_limit=16