J'ai rencontré un problème où je ne pouvais que deviner quel processus mangeait le processeur.
Mon utilisation du processeur était d'environ 80 % pour tous les cœurs de psensor.
J'ai essayé htop
, top
et ps -A -o pcpu,pid,cmd --sort +pcpu
(le dernier que j'ai même essayé avec sudo en vain).
Tout cela montrait le pid coupable (dont j'étais au courant) en utilisant environ 7 % seulement…
Quand je SIGKILL sur ce pid, tout revient à la normale.
Pour tester, j'ai fait une boucle infinie sur le terminal while true;do echo -n;done
mais que je pouvais clairement voir à htop ; donc je suppose que ce qui causait des problèmes n'était pas similaire à ça…
Alors je me demande s'il y a d'autres façons d'avoir trouvé le coupable sans avoir à deviner ?
En y repensant, je pense que j'aimerais savoir quels calculs psensor
et "l'applet d'indicateur de charge du système" utilise qui a pu afficher cette valeur mais que les autres n'ont pas pu ?
PS :lien sur le temps d'attente,
lien sur la charge moyenne
Réponse acceptée :
Je ne connais pas suffisamment les détails pour donner des indications précises, mais je suppose qu'il existe deux sources de différences entre la charge réelle causée et l'utilisation CPU indiquée :
-
Le processus peut consister en plusieurs threads et
top
peut ne pas les résumer. Vous pouvez voir le nombre de threads par ceci :ps -eo pid,nlwp,%cpu,user,args
En
top
vous pouvez changer la gestion des threads avecH
. L'utilisation du processeur de chaque thread est généralement assez faible. -
Le processus peut entraîner de nombreuses E/S. Le temps d'attente d'E/S fait partie de la charge CPU globale mais peut ne pas faire partie de la valeur d'utilisation CPU d'un processus. Vérifiez donc le
wait
valeur entop
. Il ne vous dit pas quels processus en sont la cause, mais si la valeur est faible, il ne peut pas expliquer l'effet.