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?

Respuestas:


171

Probar esto:

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

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'

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.