Warum speichert systemd-coredump den Speicherauszug im Speicher selbst?

7

Ich habe gerade bemerkt, dass der größte Teil meines Gedächtnisses durch einen Kern einiger Prozesse belastet war, die ich kürzlich getötet hatte. Ich hatte einen systemd-coredump-Prozess, der für jeden abgestürzten Prozess ausgeführt wurde (normalerweise waren die Prozesse Google-Chrome, den ich zwangsweise beenden musste, was den hohen Speicherverbrauch erklärt).

Was ich wissen möchte, ist, warum anstatt den Kern des abgestürzten Prozesses auf die Festplatte zu kopieren, ein neuer Prozess gestartet wird, der den gesamten Kern im RAM enthält.

Ist meine Konfiguration fehlerhaft oder soll es so sein? Wenn ja, wie ändere ich das Verhalten?

Im Moment habe ich das Speichern des Core-Dumps durch Verknüpfen /dev/nullmit deaktiviert /etc/sysctl.d/coredump.conf, obwohl ich keine Core-Dumps sehe, aber dennoch aktiviert lassen möchte. Alle Ideen / Hinweise wäre dankbar.

(Das Problem wird auch unter folgender Adresse veröffentlicht: https://bbs.archlinux.org/viewtopic.php?pid=1246237 )

pareshverma91
quelle
Wichtiger könnte sein, warum Ihr Chrome SIGSEGV (11) erhält. Möglicherweise möchten Sie mit dem Ausführen memtest86und Überprüfen Ihres Speichers beginnen, bevor Sie dieses Problem lösen. man corewird viele der verfügbaren Optionen für Core-Dumps erläutern.
bsd
@bdowning Nun, in jenen Tagen (als ich die Frage stellte) würde ich das Abschalten von Chrome und anderen Prozessen erzwingen (was übrigens ganz gut laufen würde). Ich denke also, dies würde den Core Dump erzeugen.
Pareshverma91

Antworten:

3

Standardmäßig werden Core-Dumps auf die Festplatte geschrieben und sollten nicht in den Speicher geschrieben werden. Weitere Informationen finden Sie auf der Handbuchseite . Sie können den Pfad und den Dateinamen der Kerndatei herausfinden und ändern, indem Sie sich ansehen/proc/sys/kernel/core_pattern

Sie können einfach deaktivieren Core - Dumps durch Umleiten coredump.confzunull

$ sudo ln -s /dev/null /etc/sysctl.d/coredump.conf && /lib/systemd/systemd-sysctl

Eine andere Möglichkeit, Core-Dumps zu deaktivieren, besteht darin , die Einstellungen in zu ändernlimits.conf

hanxue
quelle
Ich hatte die Core-Dumps deaktiviert, als ich feststellte, dass dies auf eine dieser Arten geschah (oder beide, erinnere mich jetzt nicht). Was mich verwirrt, ist, dass nach dem Absturz eines Prozesses ein neuer Systemd-Coredump-Prozess gestartet wird, der den Core-Dump im Speicher beibehält (unter Berücksichtigung der Menge an Speicher, die er belegt). Nun kann argumentiert werden, dass der Prozess möglicherweise auf die Festplatte ausgelagert wurde, aber das Problem ist, warum der Prozess existiert. Ich meine, warum konnte der Core-Dump-Handhabungsprozess den Dump nicht einfach in eine Datei schreiben und beenden.
Pareshverma91
Beachten Sie, dass der Dateiname von geändert coredump.confzu 50-coredump.confjetzt. Siehe auch das Arch Linux-Wiki für Systemd .
JonnyJD