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?

Yang
quelle

Antworten:

171

Probieren Sie es aus:

grep -i 'killed process' /var/log/messages
John Feminella
quelle
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'
Jose Fernandez
quelle
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
Prashant Lakhera
quelle
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
Praveen
quelle