Поиск, какой процесс был убит 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

Эта информация не имеет смысла, не зная, что означает оценка, и это нигде не задокументировано. Все, что вы можете увидеть, это увеличение счета, затем процесс, который убивают, так что, возможно, это был убийца, или, может быть, это было что-то другое, нет никакой уверенности.
Лоран

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.