Trouver quel processus a été tué par le tueur d'OOM Linux

173

Lorsque Linux manque de mémoire (MOO), le tueur de MOO choisit un processus à tuer en fonction de certaines heuristiques (c'est une lecture intéressante: http://lwn.net/Articles/317814/ ).

Comment déterminer par programme quels processus ont été récemment tués par le tueur OOM?

Yang
la source

Réponses:

171

Essayez ceci:

grep -i 'killed process' /var/log/messages
John Feminella
la source
18
FWIW, je reçois ces messages dans syslog ou kern.log, mais pas dans / var / log / messages
jberryman
36
Vous pouvez utiliser "egrep -i -r 'processus tué' / var / log /" pour le rechercher également dans d'autres endroits.
metdos
5
@jberryman: Pour une raison quelconque, syslog est /var/log/syslogprésent sur certaines distributions et /var/log/messagessur d'autres. Je pense que c'est Debian pour le premier et Red Hat pour le second, BICBW.
Tom Anderson
5
"dmesg | egrep -i 'tué processus'" et vous pouvez rechercher les journaux n'importe où (y compris ceux archivés) :)
John D
2
egrepn'a pas de sens ici. Tout à fait vieux grep, ou si nous sommes précis, a fgrepbeaucoup plus de sens. (Modifier la réponse en conséquence.)
Antak
148

Essayez ceci pour ne pas avoir à vous soucier de l'emplacement de vos journaux

dmesg | egrep -i 'killed process'
José Fernandez
la source
1
C'est également utile, mais bien que je ne puisse malheureusement pas l'expliquer, je vois des résultats /var/log/messagesqui n'apparaissent pas dans dmesg/ /var/log/dmesg. Cela pourrait être une sorte de mauvaise configuration, mais il convient de noter que l'utilisation des deux approches pourrait être une bonne idée.
kungphu
3
Vous n'êtes pas sûr de votre fichier journal, mais la sortie de dmesg provient d'un tampon en anneau de taille limitée. Si d'autres choses ont rempli la mémoire tampon depuis l'oom-killer, vous perdrez la sortie oom-killer.
Dan Pritts
C'était la seule façon dont j'ai trouvé comment voir que ce processus était tué dans le conteneur OpenVZ
igo
16
Je suggérerais également d'utiliser dmesg -Tpour obtenir des horodatages lisibles
gukoff
2
Comparé à / var / log / messages, cela présente les avantages de ne pas nécessiter de privilèges root
Kineolyan
52

Maintenant, dstat fournit la fonctionnalité pour savoir dans votre système en cours d'exécution quel processus est candidat pour être tué par le mécanisme oom

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

et selon la page de manuel

  --top-oom
          show process that will be killed by OOM the first
Prashant Lakhera
la source
Cette information n'a pas de sens sans savoir ce que signifie le score, et cela n'est documenté nulle part. Tout ce que vous pourriez voir, c'est l'augmentation du score, puis le processus en train d'être tué, alors peut-être que c'était le tueur oom, ou peut-être que c'était autre chose, il n'y a aucun moyen d'en être sûr.
laurent le
18

Essayez ceci:

grep "Killed process" /var/log/syslog
Praveen
la source