Eine kurze Analyse der Verwendung der Coredump-Technologie zur Ermittlung der Ursache von Prozessabstürzen in Linux

Eine kurze Analyse der Verwendung der Coredump-Technologie zur Ermittlung der Ursache von Prozessabstürzen in Linux

Vor kurzem ist im Projekt ein Problem aufgetreten. Das serverseitige Programm stürzte plötzlich ab und wurde beendet. Wir haben die Coredump-Technologie verwendet, um die Ursache des Absturzes zu finden, d. h. um festzustellen, welche Funktion ausgeführt wurde, als der Prozess beendet wurde, und um seinen Status zu ermitteln.

Wenn Coredump auf dem System aktiviert ist, oder genauer gesagt, wenn Coredump in der aktuellen Shell-Umgebung aktiviert ist, wird der Speicherstatus des Prozessstapels zu diesem Zeitpunkt in die Core-Datei geschrieben, wenn das Programm in der aktuellen Shell-Umgebung abstürzt und beendet wird. Verwenden Sie gdb, um den Status des in dieser Core-Datei gespeicherten Stapels anzuzeigen, gdb a.out core. (Weitere Informationen zu Coredump und Shell finden Sie in meinem anderen Blog „Mithilfe von dotnet-dump den Grund ermitteln, warum .net core 3.0 100 % der CPU belegt“, und zu gdb lesen Sie bitte „Verwendung und Zusammenfassung von gdb-Debugging-Befehlen“).

Der Standardspeicherort der Core-Datei ist der Speicherort der ausführbaren Datei und der Standardname ist core. Speicherort und Name können festgelegt werden. Meine Einstellungen sind:

mkdir /home/corefile 
echo "/home/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

Auf diese Weise wird die generierte Core-Datei im Verzeichnis /home/corefile abgelegt und der Name der Core-Datei wird in der Form core-%e-%p-%t angezeigt, wobei %e den Namen der ausführbaren Datei, %p den Prozess und %t den Zeitpunkt der Generierung der Core-Datei darstellt (beachten Sie, dass es sich um die Unix-Zeit handelt).

Hier ist eine Routine, die einen Coredump verursachen kann:

Die gekreuzten Linien zeigen an, wo der Coredump stattfindet. Nach der Ausführung werden die folgenden Dateien im Verzeichnis /home/corefile generiert:

[root@localhostwin7]# ls /home/corefile/ 

a.out ist der Name der ausführbaren Datei, 5082 ist die PID und 1490760381 ist die Unix-Zeit, zu der die Datei generiert wurde. Legen Sie die Dateien a.out und core in ein Verzeichnis und verwenden Sie den Befehl:

gdb a.out core-a.out-5082-1490760381

Geben Sie gdb ein und verwenden Sie den Befehl backtrace, um den Speicherstatus des Stapels anzuzeigen, wenn der Prozess beendet wird, wie unten gezeigt:

Es ist ersichtlich, dass beim Beenden des Prozesses die letzte ausgeführte Funktion die Quadratfunktion ist. ————————————————

Zusammenfassen

Oben habe ich Ihnen die Verwendung der Coredump-Technologie zur Ermittlung der Ursache von Prozessabstürzen unter Linux vorgestellt. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten!

<<:  Lernen Sie, wie Sie mit vscode eine React-Native-Entwicklungsumgebung erstellen

>>:  Eine kurze Erläuterung der Verwendung von GROUP BY und HAVING in SQL-Anweisungen

Artikel empfehlen

Was ist BFC? So löschen Sie Floats mithilfe von CSS-Pseudoelementen

BFC-Konzept: Der Blockformatierungskontext ist ei...

Vue.js-Framework implementiert Warenkorbfunktion

In diesem Artikel wird der spezifische Code des V...

Designtheorie: Menschenorientiertes Designkonzept

<br />Als sich das Denken in Ost und West sp...

So fragen Sie doppelte Daten in einer MySQL-Tabelle ab

INSERT INTO hk_test(Benutzername, Passwort) VALUE...

Erstellen eines statischen Jenkins Docker-Agentknotens

Ein statischer Knoten ist auf einer Maschine fixi...

Vue implementiert eine Formularvalidierungsfunktion

Dieser Artikel beschreibt hauptsächlich, wie die ...

Erläuterung des Prinzips des MySQL-Replikationsmechanismus

Hintergrund Bei der Replikation handelt es sich u...

Bedeutung und Verwendung einer Linux-CD

Was bedeutet Linux-CD? Unter Linux bedeutet cd „V...

Lernprogramm zur Verwendung von HTML-Formular-Tags

Mithilfe von HTML-Formularen können verschiedene ...

Einführung in die Cloud-native-Technologie Kubernetes (K8S)

Inhaltsverzeichnis 01 Was ist Kubernetes? 02 Der ...

So installieren Sie MySQL 5.7 unter Windows

Laden Sie zuerst die komprimierte Version von MyS...

Detaillierte Erklärung der in Node.js integrierten Module

Inhaltsverzeichnis Überblick 1. Pfadmodul 2. Bis ...