Localizando qual processo foi morto pelo Linux OOM killer

172

Quando o Linux fica sem memória (OOM), o assassino do OOM escolhe um processo para matar com base em algumas heurísticas (é uma leitura interessante: http://lwn.net/Articles/317814/ ).

Como é possível determinar programaticamente quais processos foram mortos recentemente pelo assassino da OOM?

Yang
fonte

Respostas:

171

Tente isto:

grep -i 'killed process' /var/log/messages
John Feminella
fonte
18
FWIW, eu recebo essas mensagens no syslog, ou kern.log, mas não / var / log / messages
jberryman
36
Você pode usar "egrep -i -r 'processo morto' / var / log /" para pesquisá-lo também em outros lugares.
metdos
5
@berryberry: Por alguma razão, o syslog está presente em /var/log/syslogalgumas distros e /var/log/messagesem outras. Eu acho que é o Debian para o primeiro e o Red Hat para o último, o BICBW.
Tom Anderson
5
"Dmesg | egrep -i 'processo de mortos" e você pode pesquisar registros em qualquer lugar (incluindo aqueles arquivados) :)
John D
2
egrepnão faz sentido aqui. Simplesmente velho grep, ou se estamos sendo específicos fgrep, faz muito mais sentido. (Edição de resposta em conformidade.)
antak
148

Tente isso para não precisar se preocupar com a localização dos seus logs

dmesg | egrep -i 'killed process'
Jose Fernandez
fonte
1
Isso também é útil, mas, embora infelizmente não possa explicar, estou vendo resultados em /var/log/messagesque não estão aparecendo em dmesg/ /var/log/dmesg. Pode ser algum tipo de configuração incorreta, mas vale a pena notar que usar as duas abordagens pode ser uma boa idéia.
kungphu
3
Não tenho certeza do seu arquivo de log, mas a saída do dmesg é de um buffer de anel de tamanho limitado. Se outras coisas tiverem preenchido o buffer desde o oom-killer, você perderá a saída do oom-killer.
Dan Pritts
Esta foi a única maneira que descobri como ver esse processo ser morto no contêiner OpenVZ #
1616
16
Eu também sugiro usar dmesg -Ta fim de obter timestamps legíveis
gukoff
2
Comparado a / var / log / messages, este tem a vantagem de não exigir privilégios de root
Kineolyan
52

Agora o dstat fornece o recurso para descobrir em seu sistema em execução qual processo é candidato a ser morto pelo mecanismo oom

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

e conforme a página de manual

  --top-oom
          show process that will be killed by OOM the first
Prashant Lakhera
fonte
Essa informação não faz sentido sem saber o significado da pontuação e não está documentada em nenhum lugar. Tudo o que você pode ver é o aumento da pontuação e, em seguida, o processo está sendo finalizado; então, talvez tenha sido o assassino, ou talvez fosse outra coisa, não há como ter certeza.
laurent
18

Tente isto:

grep "Killed process" /var/log/syslog
Praveen
fonte