Scoprire quale processo è stato ucciso dal killer OOM di Linux


173

Quando Linux esaurisce la memoria (OOM), il killer OOM sceglie un processo da uccidere basato su alcune euristiche (è una lettura interessante: http://lwn.net/Articles/317814/ ).

Come si può determinare a livello di programmazione quali processi sono stati recentemente uccisi dal killer OOM?

Risposte:


171

Prova questo:

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

18
FWIW, ottengo quei messaggi in syslog, o kern.log, ma non / var / log / messages
jberryman

36
Puoi usare "egrep -i -r 'kill process' / var / log /" per cercarlo anche in altri posti.
metdos,

5
@jberryman: Per qualche ragione, syslog è presente in /var/log/syslogalcune distro e /var/log/messagesin altri. Penso che sia Debian per il primo e Red Hat per il secondo, BICBW.
Tom Anderson,

5
"dmesg | egrep -i 'processo ucciso'" e puoi cercare i log ovunque (compresi quelli archiviati) :)
John D

2
egrepnon ha senso qui. Semplicemente vecchio grep, o se siamo specifici fgrep, ha molto più senso. (Modifica la risposta di conseguenza.)
entro il

148

Prova questo in modo da non doverti preoccupare di dove si trovano i tuoi registri

dmesg | egrep -i 'killed process'

1
Anche questo è utile, ma purtroppo non posso spiegarlo, sto vedendo risultati /var/log/messagesche non vengono visualizzati in dmesg/ /var/log/dmesg. Potrebbe essere una sorta di configurazione errata, ma vale la pena notare che usare entrambi gli approcci potrebbe essere una buona idea.
Kungphu,

3
Non sono sicuro del file di registro, ma l'output di dmesg proviene da un buffer ad anello di dimensioni limitate. Se altre cose hanno riempito il buffer dal Oom-Killer, allora perderai l'output del Oom-Killer.
Dan Pritts,

Questo è stato l'unico modo in cui ho scoperto che il processo è stato interrotto nel contenitore OpenVZ
igo

16
Suggerirei anche di utilizzare dmesg -Tper ottenere timestamp leggibili
gukoff

2
Rispetto a / var / log / messages, questo ha i vantaggi di non richiedere i privilegi di root
Kineolyan,

52

Ora dstat fornisce la funzione per scoprire nel tuo sistema in esecuzione quale processo è idoneo per essere ucciso dal meccanismo di oom

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

e come da pagina man

  --top-oom
          show process that will be killed by OOM the first

Questa informazione non ha senso senza sapere cosa significa il punteggio e non è documentata da nessuna parte. Tutto quello che potresti vedere è l'aumento del punteggio, quindi il processo viene ucciso, quindi forse è stato l'assassino, o forse era qualcos'altro, non c'è modo di esserne sicuri.
laurent

18

Prova questo:

grep "Killed process" /var/log/syslog
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.