Der Kernel hat eine Reihe von Dingen protokolliert, bevor dies passiert ist, aber die meisten werden wahrscheinlich nicht enthalten sein /var/log/messages
, je nachdem, wie Sie (r)syslogd
konfiguriert sind. Versuchen:
grep oom /var/log/*
grep total_vm /var/log/*
Ersteres sollte ein paar Mal auftauchen und letzteres nur an ein oder zwei Stellen. Das ist die Datei, die Sie anzeigen möchten.
Suchen Sie in einer der Dateien, die auch enthalten, die ursprüngliche Zeile "Nicht genügend Speicher" total_vm
. Dreißig Sekunden vor einer Minute (könnte mehr sein, könnte weniger sein) vor dieser Zeile finden Sie etwas wie:
kernel: foobar invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Sie sollten auch eine Tabelle irgendwo zwischen dieser Zeile und der Zeile "Out of Memory" mit Überschriften wie folgt finden:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
Dies sagt Ihnen vielleicht nicht viel mehr als Sie bereits wissen, aber die Felder sind:
- pid Die Prozess-ID.
- uid Benutzer - ID.
- tgid Thread-Gruppen-ID.
- total_vm Nutzung des virtuellen Speichers (in 4 kB Seiten)
- rss Nutzung des residenten Speichers (in 4-kB-Seiten)
- nr_ptes Seite Tabelleneinträge
- swapents Swap - Einträge
- oom_score_adj Normalerweise 0; Eine niedrigere Zahl gibt an, dass der Prozess weniger wahrscheinlich abstürzt, wenn der OOM-Killer aufgerufen wird.
Sie können meistens ignorieren nr_ptes
und swapents
obwohl ich glaube, dass dies Faktoren sind, die bestimmen, wer getötet wird. Dies ist nicht unbedingt der Prozess, der den meisten Speicher benötigt, aber es ist sehr wahrscheinlich. Weitere Informationen zum Auswahlverfahren finden Sie hier . Grundsätzlich wird der Prozess, der am Ende die höchste OOM-Punktzahl aufweist, beendet. Dies ist die "Punktzahl", die in der Zeile "Nicht genügend Speicher" angegeben ist. Leider werden die anderen Werte nicht gemeldet, aber diese Tabelle enthält einige Hinweise in Bezug auf Faktoren.
Auch hier wird dies wahrscheinlich nicht viel mehr tun, als das Offensichtliche zu beleuchten: Dem System ging der Speicher aus und es mysqld
wurde beschlossen, zu sterben, weil das Töten die meisten Ressourcen freisetzen würde . Dies bedeutet nicht, dass mysqld
etwas falsch gemacht wird. Sie können sich die Tabelle ansehen, um festzustellen, ob zu diesem Zeitpunkt noch etwas nicht stimmte, aber es gibt möglicherweise keinen eindeutigen Schuldigen: Das System verfügt möglicherweise nicht über genügend Arbeitsspeicher, nur weil Sie die ausgeführten Prozesse falsch eingeschätzt oder konfiguriert haben.
dmesg
?