57 votes

Utilisation de l'unité centrale de Linux et historique de l'exécution des processus

Existe-t-il un moyen de voir quel(s) processus a(ont) causé la plus grande utilisation de l'unité centrale ?

J'ai un AMAZON EC2 Linux dont l'utilisation du CPU atteint 100 pour cent et m'oblige à redémarrer le système. Je ne peux même pas me connecter via SSH (en utilisant putty).

Existe-t-il un moyen de savoir ce qui provoque une utilisation aussi élevée de l'unité centrale et quel processus en est à l'origine ?

Je connais sar y top mais je n'ai pu trouver nulle part l'historique de l'exécution du processus. Voici l'image provenant de l'outil de surveillance d'Amazon EC2, mais j'aimerais savoir quel processus est à l'origine de cette situation :

enter image description here

J'ai également essayé ps -eo pcpu,args | sort -k 1 -r | head -100 mais pas de chance de trouver une utilisation aussi élevée de l'unité centrale.

51voto

Matthew Ife Points 22370

Il y a plusieurs façons de procéder. Notez qu'il est tout à fait possible que ce soit plusieurs processus dans un scénario d'emballement qui soient à l'origine de ce problème, et non un seul.

La première méthode consiste à configurer pidstat pour qu'il s'exécute en arrière-plan et produise des données.

pidstat -u 600 >/var/log/pidstats.log & disown $!

Vous obtiendrez ainsi un aperçu assez détaillé du fonctionnement du système à intervalles de dix minutes. Je vous suggère de l'utiliser en premier lieu, car il produit les données les plus précieuses et les plus fiables.

Il y a un problème avec cela, principalement si la boîte entre dans une boucle de processeur et produit une charge énorme - vous n'avez pas la garantie que votre processus réel s'exécutera de manière opportune pendant la charge (voire pas du tout), de sorte que vous pourriez manquer la sortie !

La deuxième façon de procéder consiste à activer la comptabilité des processus. Il s'agit peut-être d'une option à plus long terme.

accton on

Cela permettra d'activer la comptabilité des processus (si elle n'a pas déjà été ajoutée). Si ce n'était pas le cas auparavant, il faudra un certain temps pour que cela fonctionne.

Après avoir été exécuté, par exemple pendant 24 heures, vous pouvez exécuter une commande de ce type (qui produira un résultat comme celui-ci).

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

Les colonnes sont classées comme suit :

  1. Nombre d'appels
  2. Pourcentage d'appels
  3. Temps réel consacré à l'ensemble des processus de ce type.
  4. Pourcentage.
  5. Temps CPU de l'utilisateur
  6. Pourcentage
  7. Temps CPU du système.
  8. Moyenne des appels IO.
  9. Pourcentage
  10. Nom de la commande

Ce que vous recherchez, ce sont les types de processus qui génèrent le plus de temps CPU utilisateur/système.

Elle décompose les données en temps total de CPU (ligne supérieure) et en répartition de ce temps de CPU. La comptabilité des processus n'est correctement prise en compte que lorsqu'elle est activée au moment où les processus se lancent. Il est donc préférable de redémarrer le système après l'avoir activée afin de s'assurer que tous les services sont pris en compte.

Cela ne vous donne en aucun cas une idée précise du processus qui pourrait être à l'origine de ce problème, mais cela peut vous donner une bonne idée. Comme il s'agit d'un instantané de 24 heures, il est possible que les résultats soient faussés, gardez cela à l'esprit. Il devrait également toujours enregistrer puisqu'il s'agit d'une fonctionnalité du noyau et que, contrairement à pidstat, il produira toujours des résultats, même en cas de forte charge.

La dernière option disponible utilise également la comptabilité des processus. Vous pouvez donc l'activer comme indiqué ci-dessus, puis utiliser le programme "lastcomm" pour produire des statistiques sur les processus exécutés à l'époque du problème, ainsi que des statistiques sur le processeur pour chaque processus.

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

Cela pourrait également vous donner des indications sur la cause du problème.

27voto

Tom Points 720

Haut de la page est un démon particulièrement pratique pour analyser les processus en profondeur. Il archive ces données par défaut pendant 28 jours. En plus de présenter une impressionnante interface de surveillance en temps réel, vous pouvez spécifier les fichiers journaux à ouvrir et les parcourir.

Les article donne une idée de ses capacités, et vous pouvez en savoir plus en consultant le site Web de la page de manuel .

C'est vraiment un logiciel merveilleux.

4voto

Janne Pikkarainen Points 31244

Des programmes tels que psmon y surveiller peut être utile pour vous. Ceux-ci peuvent surveiller les processus en cours d'exécution sur votre système et si un seuil (utilisation du CPU, utilisation de la mémoire...) est dépassé, vous pouvez les configurer pour qu'ils vous envoient un rapport par e-mail sur ce qui se passe.

Il est également possible de redémarrer automatiquement les processus défaillants.

0voto

dmh2000 Points 380

Une solution consiste à écrire un script qui est exécuté via un cron d'une minute ou dans une boucle de sommeil, et qui vous envoie un email/scp job/dump vers un volume ebs... avec des sorties pertinentes (dmesg, pstree -pa et ps aux, probablement vmstat) dès qu'il trouve la moyenne de charge au-delà d'une certaine limite...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X