Bug#815020: breaks coredump handling for systems without systemd-coredump
Wouter Verhelst
wouter at debian.org
Thu Feb 18 00:03:45 GMT 2016
On Wed, Feb 17, 2016 at 06:33:59PM -0300, Felipe Sateler wrote:
> On 17 February 2016 at 13:12, Wouter Verhelst <wouter at debian.org> wrote:
> > Package: systemd
> > Version: 229-1
> >
> > Hi,
> >
> > systemd contains the following line (src/core/main.c):
> >
> > (void) write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0);
> >
> > The intent is that at some later point, systemd-coredump is started,
> > which then sets it to something more useful.
>
> Note that "systemd-coredump is started" means exactly "set it to
> something more useful" systemd-coredump does not run as a daemon, but
> rather is invoked by the kernel.
That's not what the NEWS file seems to suggest, but I'll take your word
for it.
> > However, in Debian, systemd-coredump is in a separate package that
> > systemd itself does not depend on. As a result, if systemd is used as
> > PID1, but systemd-coredump is not installed, all core dumps are thrown
> > into the bit bucket; not just those that are generated during bootup,
> > but all core dumps after boot, too.
> >
> > They're still generated, however, since systemd also sets the default
> > soft resource limit on core file size ("ulimit -c") to the "unlimited"
> > value, rather than having the hard limit be unlimited and the soft limit
> > be set at 0.
>
> Apparently, if the core_pattern is a program, then the limit is
> ignored by linux, and should instead be honored by the called program.
yes, well, so they're generated at any rate, even if the limit is set
:-)
> > This is not an ideal situation:
> > - Generating a core dump, especially in case of a program that uses a
> > lot of memory at the time where the dump is generated, requires some
> > processing. If the core dump is thrown away, this is wasted processing
> > time. If the system is loaded (e.g., because something is forking and
> > segfaulting a lot), this is problematic behaviour. By setting the soft
> > core file size resource limit to 0, core dumps aren't even generated,
> > improving performance.
>
> How much resources does this actually consume? If the receiving
> process does nothing, I don't think there would be much effect going
> on.
>
> According to this (anectodic) upstream list post, the cost is negligible
>
> http://article.gmane.org/gmane.comp.sysutils.systemd.devel/31244/match=core_pattern
It may be "negligible", it won't be "nothing". If the system is under
high load, thousands of "negligible" isn't that any longer.
> > - The kernel.core_pattern sysctl setting is a system-wide setting; it is
> > not possible to modify this other than by using CAP_SYS_ADMIN (IIUC)
> > permissions. In contrast, the resource limits are per-process
> > configuration; any process can change its resource limits at will.
> > This allows the system to have a default of "no core dumps", but at
> > the same time, allows a developer or a system administrator to
> > temporarily enable core dumps for a particular process, without
> > requiring administrator capabilities.
>
> Because systemd-coredump respects rlimit, if systemd did not change
> the rlimit then it wouldn't work by default: meaning that
> systemd-coredump would have to somehow tell systemd (maybe at install
> time) to change the default rlimit to something saner, but without
> interfering with any admin changes.
>
> Because systemd conf snippets are always read after the main
> configuration file, it means that systemd-coredump cannot ship a
> system.conf snippet altering the default rlimit, because it would
> override admin changes in system.conf.
I'm not sure I understand this bit. Can you clarify?
> > I'm sure systemd-coredump replicates some of the above, but it isn't
> > always the best choice to have a core dump be piped into a process, and
> > therefore using the traditional "just dump everything to disk" logic can
> > still be beneficial.
>
> It can still be restored via a sysctl.d snippet, and the rlimit via system.conf.
>
> Maybe this should be documented somewhere on upgrades?
Possibly.
An alternative solution would be that systemd-sysv shipped with a unit
which would set the core_pattern back to default, which could be
overridden or disabled by a unit shipped by a unit shipped with
systemd-coredump? That would be less surprising -- I have to say I spent
a long time tracking down what happened.
--
< ron> I mean, the main *practical* problem with C++, is there's like a dozen
people in the world who think they really understand all of its rules,
and pretty much all of them are just lying to themselves too.
-- #debian-devel, OFTC, 2016-02-12
More information about the Pkg-systemd-maintainers
mailing list