Поиск, какой процесс был убит Linux OOM Killer

173

Когда в Linux не хватает памяти (OOM), убийца OOM выбирает процесс для уничтожения на основе некоторой эвристики (это интересное чтение: http://lwn.net/Articles/317814/ ).

Как можно программно определить, какие процессы были недавно убиты убийцей OOM?

Ян
источник

Ответы:

171

Попробуйте это:

grep -i 'killed process' /var/log/messages
Джон Феминелла
источник
18
FWIW, я получаю эти сообщения в syslog или kern.log, но не в / var / log / messages
jberryman
36
Вы можете использовать "egrep -i -r 'kill process' / var / log /", чтобы искать его и в других местах.
metdos
5
@jberryman: По некоторым причинам, syslog включен в /var/log/syslogнекоторых дистрибутивах и /var/log/messagesв других. Я думаю, что это Debian для первого и Red Hat для второго, BICBW.
Том Андерсон
5
"dmesg | egrep -i 'kill process'", и вы можете искать журналы в любом месте (включая архивированные) :)
John D
2
egrepздесь не имеет смысла. Обычная старая grepили, если быть точным fgrep, имеет гораздо больше смысла. (Редактирование ответа соответственно.)
antak
148

Попробуйте, чтобы вам не пришлось беспокоиться о том, где находятся ваши журналы.

dmesg | egrep -i 'killed process'
Хосе Фернандес
источник
1
Это также полезно, но, к сожалению, я не могу это объяснить, но вижу результаты /var/log/messages, которые не отображаются в dmesg/ /var/log/dmesg. Это может быть неправильной конфигурацией, но стоит отметить, что использование обоих подходов может быть хорошей идеей.
кунгфу
3
Не уверен насчет вашего файла журнала, но вывод dmesg происходит из кольцевого буфера ограниченного размера. Если после oom-killer другие вещи заполнили буфер, то вы потеряете вывод oom-killer.
Дэн Притц
Это был единственный способ увидеть, как этот процесс был убит в контейнере OpenVZ
igo
16
Я также предложил бы использовать dmesg -Tдля того, чтобы получить читаемые метки времени
gukoff
2
По сравнению с / var / log / messages, это имеет то преимущество, что не требует привилегий root
Kineolyan
52

Теперь dstat предоставляет возможность узнать в вашей работающей системе, какой процесс является кандидатом для уничтожения механизмом oom.

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

и согласно man-странице

  --top-oom
          show process that will be killed by OOM the first
Прашант Лахера
источник
Эта информация не имеет смысла, не зная, что означает оценка, и это нигде не задокументировано. Все, что вы можете увидеть, это увеличение счета, затем процесс, который убивают, так что, возможно, это был убийца, или, может быть, это было что-то другое, нет никакой уверенности.
Лоран
18

Попробуйте это:

grep "Killed process" /var/log/syslog
Praveen
источник