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
toppeut ne pas les résumer. Vous pouvez voir le nombre de threads par ceci :ps -eo pid,nlwp,%cpu,user,argsEn
topvous 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
waitvaleur 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.