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?

Respostas:


171

Tente isto:

grep -i 'killed process' /var/log/messages

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'

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.