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

CSS-Implementierungscode für die Textausrichtung

Beim Erstellen von Formularen kommt es häufig vor...

Beispielcode für Nginx zur Erreichung dynamischer und statischer Trennung

1. Einfache Konfiguration der dynamischen und sta...

Einige allgemeine Eigenschaften von CSS

CSS-Hintergrund: background:#00ffee; //Hintergrund...

Zusammenfassung der MySQL-Entwicklungsstandards und -Nutzungskenntnisse

1. Namenskonventionen 1. Datenbanknamen, Tabellen...

Führen Sie die Schritte aus, um mit Samba Ordner in CentOS 7 freizugeben

Vorwort Samba ist eine kostenlose Software, die d...

Mehrere Möglichkeiten zum einfachen Durchlaufen von Objekteigenschaften in JS

Inhaltsverzeichnis 1. Selbstaufzählbare Eigenscha...