Où puis-je voir une liste des processus tués par le noyau?


33

Existe-t-il un moyen de vérifier les processus que le noyau a tués? Parfois, je me connecte à mon serveur et constate que quelque chose qui aurait dû fonctionner toute la nuit s’arrête 8 heures plus tard et je ne suis pas sûr que ce soit les applications ou les noyaux.

Réponses:


30

Si le noyau a tué un processus (car le système n'a plus de mémoire), il y aura un message de journal du noyau. Archiver /var/log/kern.log(sous Debian / Ubuntu, d’autres distributions pourraient envoyer les journaux du noyau dans un fichier différent, mais généralement /var/logsous Linux).

Notez que si le tueur de mémoire MOO (destructeur de mémoire insuffisante) se déclenche, cela signifie que vous n’avez pas assez de mémoire virtuelle. Ajouter plus de swap (ou peut-être plus de RAM).

Certaines pannes de processus sont également enregistrées dans les journaux du noyau (par exemple, des erreurs de segmentation).

Si les processus ont été lancés à partir de cron, vous devriez avoir un mail avec des messages d'erreur. Si les processus ont été démarrés à partir d'un shell dans un terminal, vérifiez les erreurs dans ce terminal. Exécutez le processus screenpour voir le terminal à nouveau dans la matinée. Cela pourrait ne pas aider si le tueur OOM-tueur se déclenche, car cela aurait également tué le processus cron ou screen; mais si vous rencontrez le tueur OOM, c'est le problème que vous devez résoudre.


Quel est le message de tuer le fil dans /var/log/kern.log?
Abeille

12

La comptabilité des processus pourrait aider ici.

En bref:

apt-get install acct

Ensuite, essayez des commandes comme:

lastcomm
sa

ou sur Ubuntu:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

Voir:

MISE À JOUR

Étrangement, le pacctfichier contient des informations sur l'état de sortie, mais ni lastcommne sasemble l'imprimer.

Donc, autant que je sache, il vous faudrait écrire votre propre programme en C pour accéder à l'information.

MISE À JOUR 2

Voici une version qui affiche le code de sortie.

Les deux derniers champs sont "S" pour signalés et "E" pour sortis, suivis du numéro du signal ou de l'état de sortie.

Donc, dans votre cas, vous cherchez probablement "S 15", ce qui signifie qu’il a un SIGTERM.

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15

Par rapport à "E 0", cela signifie que le processus s'est terminé sans erreur.

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0

Seulement testé au minimum.


-1

service sudo --status-all

Cette commande vous indiquera quels sont les services en cours d’exécution et ceux qui ne sont ni démarrés ni arrêtés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.