Wo kann ich eine Liste der vom Kernel getöteten Prozesse sehen?


33

Kann ich irgendwie überprüfen, welchen meiner Prozesse der Kernel beendet hat? Manchmal logge ich mich auf meinem Server ein und stelle fest, dass etwas, das die ganze Nacht hätte laufen sollen, erst nach 8 Stunden aufgehört hat und ich bin mir nicht sicher, ob es die Anwendungen oder die Kernel sind.

Antworten:


30

Wenn der Kernel einen Prozess beendet hat (weil auf dem System nicht genügend Speicher vorhanden ist), wird eine Kernel-Protokollmeldung angezeigt. Einchecken /var/log/kern.log(unter Debian / Ubuntu können andere Distributionen Kernel-Protokolle an eine andere Datei senden, normalerweise jedoch /var/logunter Linux).

Wenn der OOM-Killer (Out-of-Memory-Killer) ausgelöst wird, bedeutet dies, dass Sie nicht über genügend virtuellen Speicher verfügen. Fügen Sie mehr Swap (oder vielleicht mehr RAM) hinzu.

Einige Prozessabstürze werden auch in Kernel-Protokollen aufgezeichnet (z. B. Segmentierungsfehler).

Wenn die Prozesse von cron gestartet wurden, sollten Sie eine Mail mit Fehlermeldungen haben. Wenn die Prozesse von einer Shell in einem Terminal gestartet wurden, überprüfen Sie die Fehler in diesem Terminal. Führen Sie den Vorgang aus screen, um das Terminal am Morgen erneut anzuzeigen. Dies hilft möglicherweise nicht, wenn der OOM-Killer ausgelöst wurde, da er möglicherweise auch den Cron- oder Screen-Prozess beendet hat. Aber wenn Sie auf den OOM-Killer gestoßen sind, ist dies das Problem, das Sie beheben müssen.


Wie ist die Thread-Kill-Nachricht in /var/log/kern.log?
Bee

12

Process Accounting könnte hier Abhilfe schaffen.

In Kürze:

apt-get install acct

Dann probiere Befehle wie:

lastcomm
sa

oder auf Ubuntu:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

Sehen:

AKTUALISIEREN

Seltsamerweise enthält die pacctDatei Informationen zum Beendigungsstatus, scheint diese jedoch lastcommnicht sazu drucken.

Soweit ich sehen kann, müssten Sie Ihr eigenes C-Programm schreiben, um auf die Informationen zuzugreifen.

UPDATE 2

Hier ist eine Version, die den Exit-Code ausgibt.

Die letzten beiden Felder sind "S" für signalisiert und "E" für verlassen, gefolgt von der Signalnummer oder dem Ausgangsstatus.

In Ihrem Fall suchen Sie wahrscheinlich nach "S 15", was bedeutet, dass es ein SIGTERM hat.

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15

Im Vergleich zu "E 0" bedeutet dies, dass der Prozess ohne Fehler beendet wurde.

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0

Nur minimal getestet.


-1

sudo service --status-all

Dieser Befehl teilt Ihnen mit, welche Dienste gerade ausgeführt werden und welche nicht gestartet oder gestoppt wurden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.