Le noyau aura consigné beaucoup de choses avant que cela se produise, mais la plupart d'entre elles ne seront probablement pas insérées /var/log/messages
, selon la (r)syslogd
configuration de votre configuration. Essayer:
grep oom /var/log/*
grep total_vm /var/log/*
Les premiers devraient apparaître plusieurs fois et les derniers à un ou deux endroits seulement. C'est le fichier que vous voulez regarder.
Recherchez la ligne d'origine "Mémoire insuffisante" dans l'un des fichiers contenant également total_vm
. Trente seconde à une minute (pourrait être plus, pourrait être moins) avant cette ligne, vous trouverez quelque chose comme:
kernel: foobar invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Vous devriez également trouver un tableau quelque part entre cette ligne et la ligne "Mémoire insuffisante" avec des en-têtes comme celui-ci:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
Cela ne vous en dit peut-être pas plus que ce que vous savez déjà, mais les champs sont les suivants:
- pid L'identifiant du processus.
- uid ID utilisateur.
- tgid ID du groupe de discussion.
- total_vm utilisation de la mémoire virtuelle (en pages de 4 ko)
- rss Utilisation de la mémoire des résidents (en pages de 4 Ko)
- nr_ptes Entrées de table de page
- swapents Entrées swap
- oom_score_adj Habituellement 0; un nombre inférieur indique que le processus risque moins de mourir lorsque le tueur de MOO est appelé.
Vous pouvez principalement ignorer nr_ptes
et swapents
même si je crois que ce sont des facteurs pour déterminer qui sera tué. Ce n'est pas nécessairement le processus qui utilise le plus de mémoire, mais très probablement. Pour plus d'informations sur le processus de sélection, voir ici . En gros, le processus qui aboutit au score le plus élevé est éliminé - c'est le "score" indiqué sur la ligne "Mémoire insuffisante"; Malheureusement, les autres scores ne sont pas rapportés, mais ce tableau fournit des indices en termes de facteurs.
Encore une fois, cela ne fera probablement pas beaucoup plus qu'éclairer l'évidence: le système a manqué de mémoire et a mysqld
été choisi pour mourir car il le libérerait le plus de ressources . Cela ne signifie pas nécessairement que vous mysqld
faites quelque chose de mal. Vous pouvez consulter le tableau pour voir si quelque chose d'autre a dépassé les bornes à ce moment-là, mais il se peut qu'il ne reste aucun coupable: le système peut manquer de mémoire simplement parce que vous avez mal évalué ou mal configuré les processus en cours.
dmesg
?