Ich habe einen Startjob, der gelegentlich mit einem Segmentierungsfehler abstürzt, und ich habe einige Fragen zu Core-Dumps.
Soll ich zuerst eine Strophe hinzufügen:
limit core unlimited unlimited
Gibt es einen Nachteil beim Zulassen unbegrenzter Kerngrößen? Wäre eine endliche Grenze besser?
Zweitens, wohin geht die Kerndatei? Wenn der Standardwert kein Standard- oder logischer Ort ist, wie kann ich ihn an einer anderen Stelle anzeigen lassen?
upstart
segmentation-fault
ulimit
Bäche94
quelle
quelle
Antworten:
Unbegrenzte Core-Dumps sind in den meisten Situationen nicht ratsam, aber technisch in Ordnung. Ein Core-Dump verfügt nur über "den gesamten Speicher" des aktuellen Prozesses. Es kann also höchstens so groß sein wie Ihr RAM + Swap. Hoffentlich haben Sie dann mehr freien Speicherplatz.
Im wirklichen Leben sollten sie im Vergleich zu Total RAM + Swap "klein" sein.
Die Datei "sollte" im "aktuellen Verzeichnis" landen. Für Startaufgaben, die nicht chdir sind, ist das normalerweise /. Wenn sie das Verzeichnis wechseln, müssen Sie sie selbst suchen. Sie können jedoch einen Pfad für sie fest codieren.
Sie sollten in der Lage sein, nach
/proc/sys/kernel/core_pattern
dem "Muster" zu suchen. Wenn Sie das Muster auf so etwas einstellenecho "/var/log/core" > /proc/sys/kernel/core_pattern
, sollten alle Ihre Kerne in / var / log landenquelle
Eine Kerndatei ist ein Image eines Prozesses, der vom Betriebssystem erstellt wird, wenn der Prozess unerwartet beendet wird. Kerndateien werden erstellt, wenn sich ein Programm aufgrund eines Fehlers oder einer Verletzung der CPU- oder Speicherschutzmechanismen schlecht verhält. Das Betriebssystem beendet das Programm und erstellt die Kerndatei.
Diese Datei kann sehr nützlich sein, um festzustellen, was bei einem Prozess schief gelaufen ist. Die Produktion von Kerndateien kann standardmäßig aktiviert werden, abhängig von der Distribution und Version von Linux.
Wenn Sie überhaupt keine Kerndateien möchten, setzen Sie in Ihren Startdateien "ulimit -c 0". Dies ist die Standardeinstellung auf vielen Systemen. in können
/etc/profile
Sie findenDa abgeschnittene Dateien keinen praktischen Nutzen haben, setzen Sie die Größe der Linux-Kerndatei auf "unbegrenzt".
Die Kerndatei wird im aktuellen Arbeitsverzeichnis des Prozesses abgelegt, vorbehaltlich Schreibberechtigungen für den JVM-Prozess und freiem Speicherplatz.
Abhängig von der Kernel-Ebene steht eine nützliche Kernel-Option zur Verfügung, mit der Corefiles aussagekräftigere Namen erhalten. Als Root-Benutzer stellt die Option sysctl -w kernel.core_users_pid = 1 sicher, dass Kerndateien den Namen "Core.PID" haben.
Wenn Sie Kerndateien möchten, müssen Sie diese in Ihrem eigenen .bash_profile zurücksetzen:
würde Kerndateien zulassen, sie aber auf 50.000 Bytes beschränken.
Sie haben mehr Kontrolle über die Kerndateien in
/proc/sys/kernel/
Zum Beispiel können Sie das auf pid by markierte Tag entfernen
Kerndateien werden dann einfach "Kern" genannt. Leute machen solche Dinge, damit ein Benutzer eine nicht beschreibbare Datei mit dem Namen "core" in Verzeichnisse einfügen kann, in denen er keine Core-Dumps generieren möchte. Dies kann ein Verzeichnis (mkdir core) oder eine Datei (touch core; chmod 000 core) sein.
Aber vielleicht interessanter ist, dass Sie Folgendes tun können:
Alle Core-Dateien werden dann geworfen
/tmp/corefiles
(ändern Sie nicht core_uses_pid, wenn Sie dies tun).Testen Sie dies mit einem einfachen Skript:
Unter Ubuntu wird die Erstellung von Kerndateien über die Datei gesteuert
/etc/default/collectd
. Sie können die Erstellung von Core-Dumps aktivieren, indem Sie Folgendes festlegen:Suchen der Kerndatei
Sobald der Dämon abgestürzt ist, wird eine Datei in seinem aktuellen Arbeitsverzeichnis erstellt. Standardmäßig ist dies
pkglocalstatedir
dhprefix/var/lib/collectd
. Wenn Sie ein Paket installiert haben, ist dieses Verzeichnis höchstwahrscheinlich/var/lib/collectd
.Quellen: AP Lawrence und IBM
quelle