Nachteil der unbegrenzten Kerngröße? Wohin gehen die Kerndateien?

8

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?

Bäche94
quelle

Antworten:

6

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_patterndem "Muster" zu suchen. Wenn Sie das Muster auf so etwas einstellen echo "/var/log/core" > /proc/sys/kernel/core_pattern, sollten alle Ihre Kerne in / var / log landen

coteyr
quelle
5

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/profileSie finden

Da abgeschnittene Dateien keinen praktischen Nutzen haben, setzen Sie die Größe der Linux-Kerndatei auf "unbegrenzt".

Usage of ulimit         Action
ulimit -c               # check the current corefile limit
ulimit -c 0             # turn off corefiles
ulimit -c x             # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited     # turn on corefiles with unlimited size
ulimit -n unlimited     # allows an unlimited number of open file descriptors
ulimit -p               # size of pipes
ulimit -s               # maximum native stack size for a process
ulimit -u               # number of user processes
help ulimit             #list of other options

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.

ulimit -S -c 0 > /dev/null 2>&1

Wenn Sie Kerndateien möchten, müssen Sie diese in Ihrem eigenen .bash_profile zurücksetzen:

ulimit -c 50000

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

echo "0" > /proc/sys/kernel/core_uses_pid 

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:

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 

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:

# script that dumps core 
kill -s SIGSEGV $$ 

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:

ENABLE_COREFILES=1

Suchen der Kerndatei

Sobald der Dämon abgestürzt ist, wird eine Datei in seinem aktuellen Arbeitsverzeichnis erstellt. Standardmäßig ist dies pkglocalstatedirdh prefix/var/lib/collectd. Wenn Sie ein Paket installiert haben, ist dieses Verzeichnis höchstwahrscheinlich /var/lib/collectd.

Quellen: AP Lawrence und IBM

Mitch
quelle