Finden, welcher Prozess von Linux OOM Killer getötet wurde


172

Wenn Linux nicht mehr über genügend Arbeitsspeicher (OOM) verfügt, wählt der OOM-Killer einen zu tötenden Prozess basierend auf einigen Heuristiken aus (eine interessante Lektüre: http://lwn.net/Articles/317814/ ).

Wie kann man programmgesteuert feststellen, welche Prozesse kürzlich vom OOM-Killer getötet wurden?

Antworten:


171

Probieren Sie es aus:

grep -i 'killed process' /var/log/messages

18
FWIW, ich bekomme diese Nachrichten in syslog oder kern.log, aber nicht / var / log / messages
jberryman

36
Sie können "egrep -i -r 'töteter Prozess' / var / log /" verwenden, um ihn auch an anderen Stellen zu durchsuchen.
Metdos

5
@jberryman: Aus irgendeinem Grund ist Syslog in /var/log/syslogeinigen Distributionen und /var/log/messagesin anderen vorhanden. Ich denke, es ist Debian für das erstere und Red Hat für das letztere, BICBW.
Tom Anderson

5
"dmesg | egrep -i 'kill process'" und Sie können Protokolle überall durchsuchen (einschließlich archivierter) :)
John D

2
egrepmacht hier keinen Sinn. Einfach alt grepoder wenn wir spezifisch sind fgrep, macht viel mehr Sinn. (Antwort entsprechend
bearbeiten

148

Versuchen Sie dies, damit Sie sich keine Gedanken darüber machen müssen, wo sich Ihre Protokolle befinden

dmesg | egrep -i 'killed process'

1
Dies ist auch nützlich, aber obwohl ich es leider nicht erklären kann, sehe ich Ergebnisse /var/log/messages, die nicht in dmesg/ angezeigt werden /var/log/dmesg. Es könnte eine Art Fehlkonfiguration sein, aber es ist erwähnenswert, dass die Verwendung beider Ansätze eine gute Idee sein könnte.
Kungphu

3
Sie sind sich über Ihre Protokolldatei nicht sicher, aber die Ausgabe von dmesg erfolgt aus einem Ringpuffer mit begrenzter Größe. Wenn andere Dinge den Puffer seit dem Oom-Killer gefüllt haben, verlieren Sie die Oom-Killer-Ausgabe.
Dan Pritts

Dies war der einzige Weg, wie ich feststellen konnte, dass dieser Prozess im OpenVZ-Container beendet wurde
igo

16
Ich würde auch vorschlagen, dmesg -Tzu verwenden, um lesbare Zeitstempel zu erhalten
Gukoff

2
Im Vergleich zu / var / log / messages hat dies den Vorteil, dass keine Root-Rechte erforderlich sind
Kineolyan

52

Jetzt bietet dstat die Funktion, um in Ihrem laufenden System herauszufinden, welcher Prozess für den Tod durch einen OOM-Mechanismus in Frage kommt

dstat --top-oom
 --out-of-memory---
  kill score
 java           77
 java           77
 java           77

und gemäß Manpage

  --top-oom
          show process that will be killed by OOM the first

Diese Informationen sind bedeutungslos, ohne zu wissen, was die Punktzahl bedeutet, und das ist nirgendwo dokumentiert. Alles, was Sie vielleicht sehen, ist die Erhöhung der Punktzahl, dann der Prozess, der getötet wird. Vielleicht war es der Oom-Killer, oder vielleicht war es etwas anderes, es gibt keine Möglichkeit, sicher zu sein.
Laurent

18

Probieren Sie es aus:

grep "Killed process" /var/log/syslog
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.