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.