Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was tun, wenn Linux keine Kerndateien generiert?

Was tun, wenn Linux keine Kerndateien generiert?

藏色散人
藏色散人Original
2021-11-24 11:17:247633Durchsuche

Lösungen für das Problem, dass Linux keine Core-Dateien generiert: 1. Überprüfen Sie, ob das Core-Dump-Verzeichnis vorhanden ist, und stellen Sie ein, dass der Prozess über Schreibberechtigungen für das Verzeichnis verfügt. 2. Überprüfen Sie, ob das Dienstprogramm seteuid(); aufruft. 3. Legen Sie einen ausreichend großen Core fest Dateigrößenbeschränkungen; 4. Profil ändern usw.

Was tun, wenn Linux keine Kerndateien generiert?

Die Betriebsumgebung dieses Artikels: Linux5.9.8-System, Dell G3-Computer.

Was soll ich tun, wenn Linux keine Kerndateien generiert? Warum wird die Kerndatei nicht generiert?

1. Stellen Sie sicher, dass das Verzeichnis, in dem der Core-Dump gespeichert ist, existiert und dass der Prozess Schreibrechte für das Verzeichnis hat.

Das Verzeichnis, in dem der Core-Dump gespeichert ist, ist das aktuelle Verzeichnis des Prozesses. Dies ist im Allgemeinen das Verzeichnis, in dem sich der Prozess befand, als der Befehl zum Starten des Prozesses ausgegeben wurde. Wenn es jedoch über ein Skript gestartet wird, ändert das Skript möglicherweise das aktuelle Verzeichnis. In diesem Fall unterscheidet sich das tatsächliche aktuelle Verzeichnis des Prozesses von dem Verzeichnis, in dem das Skript ursprünglich ausgeführt wurde. Zu diesem Zeitpunkt können Sie das Ziel des symbolischen Links „/proc/277cd6bc5823f70298dd2fa0a1e5f686/cwd“ anzeigen, um die tatsächliche aktuelle Verzeichnisadresse des Prozesses zu ermitteln. Über diese Methode können auch über Systemdienste gestartete Prozesse angezeigt werden.

2. Wenn das Programm seteuid()/setegid() aufruft, um den effektiven Benutzer oder die Gruppe des Prozesses zu ändern, generiert das System standardmäßig keinen Core-Dump für diese Prozesse.

Viele Dienstprogramme rufen seteuid() auf, beispielsweise MySQL. Unabhängig davon, welchen Benutzer Sie zum Ausführen von mysqld_safe zum Starten von MySQL verwenden, ist der effektive Benutzer für mysqld immer der msyql-Benutzer. Wenn Sie ursprünglich ein Programm als Benutzer A ausgeführt haben, der Benutzer des in PS angezeigten Programms jedoch B ist, haben diese Prozesse seteuid aufgerufen. Damit diese Prozesse Coredump generieren können, ist (echo „1“ > /proc/sys/kernel/suid_dumpable) erforderlich.

3. Wie wir alle wissen, dient dies dazu, ein ausreichend großes Limit für die Kerndateigröße festzulegen.

Die Größe der beim Programmabsturz generierten Core-Datei entspricht der Größe des Speichers, den das Programm bei der Ausführung belegt. Das Verhalten beim Programmabsturz kann jedoch nicht auf der Grundlage des normalen Verhaltens abgeschätzt werden. Beispielsweise können Fehler wie ein Pufferüberlauf dazu führen, dass der Stapel zerstört wird. Daher wird der Wert einer bestimmten Variablen häufig geändert Das Programm verwendet diese Größe, um Speicher zu beanspruchen. Dies kann dazu führen, dass das Programm viel mehr Speicher beansprucht als gewöhnlich. Unabhängig davon, wie wenig Speicher das Programm im Normalbetrieb belegt, ist es daher besser, sicherzustellen, dass die Core-Datei generiert wird und die Größenbeschränkung auf unbegrenzt eingestellt ist.

4. Fügen Sie Folgendes hinzu:

ulimit -c unlimited > /dev/null 2?&1

zu /etc/profile 5. Wenn Sie für Programme, die im Allgemeinen auf der CLI gestartet werden, Folgendes festlegen:

ulimit -c unlimited

, können Sie eine Core-Dump-Datei generieren, wenn sie außerhalb des Programms beendet wird. Bei Programmen, die im Daemon-Modus ausgeführt werden, besteht der Hauptunterschied zu Programmen, die über die CLI gestartet werden, in der Ausführungsumgebung des Prozesses, zu der auch

cwd (aktuelles Arbeitsverzeichnis) gehört. Wenn Sie das Format der Kerndatei in einem relativen Pfad definieren, definieren Sie beispielsweise /proc/sys/kernel/core_pattern als:

core-%e-%p-%t

Im Allgemeinen lautet der cwd der Daemon-Datei /, Sie können /proc/< übergeben ;your_program_pid>/cwd Zum Anzeigen stellen Sie normalerweise eine Verbindung zum Verzeichnis / her. Und wenn der Benutzer keine Schreibberechtigung für dieses Verzeichnis hat, wird die Core-Dump-Datei nicht generiert.

Die direkteste Lösung besteht darin, /proc/sys/kernel/core_pattern in den absoluten Pfad zu ändern: /data/coredump/core-%e-%p-%t

Und sicherzustellen, dass es grundsätzlich in Ordnung ist.

Ändern Sie das Core-Dump-Dateiformat in der Datei /proc/sys/kernel/core_pattern in einen absoluten Pfad, wie zum Beispiel:

/data/coredump/core-%e-%p-%t

Wann wird die Core-Datei nicht generiert?

Die Kerndatei wird unter den folgenden Bedingungen nicht generiert:

(a) Der Prozess ist eine festgelegte Benutzer-ID und der aktuelle Benutzer ist nicht der Eigentümer der Programmdatei.

(b) Der Prozess ist set-group-ID und der aktuelle Benutzer Der Benutzer ist nicht der Gruppeneigentümer der Programmdatei

(c) Der Benutzer hat keine Berechtigung, in das aktuelle Arbeitsverzeichnis zu schreiben

(d) Die Datei ist es auch groß. Die Berechtigungen der Kerndatei (vorausgesetzt, die Datei existierte vorher nicht) sind normalerweise Benutzer-Lesen/Schreiben, Gruppen-Lesen und andere Leseberechtigungen.

Empfohlenes Lernen: „Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas tun, wenn Linux keine Kerndateien generiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn