Encontrar qué proceso fue asesinado por el asesino de OOM de Linux

173

Cuando Linux se queda sin memoria (OOM), el asesino de OOM elige un proceso para matar basado en algunas heurísticas (es una lectura interesante: http://lwn.net/Articles/317814/ ).

¿Cómo se puede determinar mediante programación qué procesos han sido asesinados recientemente por el asesino OOM?

Yang
fuente

Respuestas:

171

Probar esto:

grep -i 'killed process' /var/log/messages
John Feminella
fuente
18
FWIW, recibo esos mensajes en syslog o kern.log, pero no en / var / log / messages
jberryman
36
Puede usar "egrep -i -r 'kill process' / var / log /" para buscarlo también en otros lugares.
metdos
55
@jberryman: Por alguna razón, syslog está en /var/log/syslogalgunas distribuciones y /var/log/messagesen otras. Creo que es Debian para el primero y Red Hat para el segundo, BICBW.
Tom Anderson el
55
"dmesg | egrep -i 'proceso eliminado'" y puede buscar registros en cualquier lugar (incluidos los archivados) :)
John D
2
egrepNo tiene sentido aquí. Simplemente grep, o si estamos siendo específicos fgrep, tiene mucho más sentido. (Edición de la respuesta en consecuencia.)
antak
148

Prueba esto para que no tengas que preocuparte de dónde están tus registros

dmesg | egrep -i 'killed process'
Jose fernandez
fuente
1
Esto también es útil, pero aunque desafortunadamente no puedo explicarlo, veo resultados /var/log/messagesque no aparecen en dmesg/ /var/log/dmesg. Podría ser algún tipo de configuración incorrecta, pero vale la pena señalar que usar ambos enfoques podría ser una buena idea.
kungphu
3
No estoy seguro acerca de su archivo de registro, pero la salida de dmesg es de un buffer de anillo de tamaño limitado. Si otras cosas han llenado el búfer desde el oom-killer, entonces perderá la salida del oom-killer.
Dan Pritts
Esta fue la única forma en que encontré cómo ver que el proceso se
cerró
16
También sugeriría usar dmesg -Tpara obtener marcas de tiempo legibles
gukoff el
2
En comparación con / var / log / messages, esto tiene las ventajas de no requerir privilegios de root
Kineolyan
52

Ahora dstat proporciona la función para descubrir en su sistema en ejecución qué proceso es candidato para ser asesinado por el mecanismo OOM

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

y según la página man

  --top-oom
          show process that will be killed by OOM the first
Prashant Lakhera
fuente
Esta información no tiene sentido sin saber lo que significa el puntaje, y eso no está documentado en ninguna parte. Todo lo que puede ver es el aumento de la puntuación, luego el proceso que se está matando, por lo que tal vez fue el asesino de Oom, o tal vez fue otra cosa, no hay forma de estar seguro.
Laurent
18

Probar esto:

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