#1 Le 17/04/2010, à 13:48
- Skippy le Grand Gourou
Connaître la consommation CPU d'un processus particulier
Plop les gens,
Actuellement, à part top, il n'y a pas d'outil GNU/Linux pour trouver directement la consommation CPU d'un processus « en temps réel », en tout cas distribué par défaut. Mais top c'est pas top parce que ça ne montre que la consommation des processus les plus gourmands, et c'est une interface (n?)curses, qui la rend chiante à parser.
Pour ceux qui en ont besoin (et vu google, il y a l'air d'y en avoir…), voici donc un petit script sans prétention qui permet de s'en charger :
#!/bin/bash
if [ -z $1 ]
then
echo "Usage : $0 pid"
fi
PID=$1;
consumption=(0 0 0);
while true
do
if [ ! -e /proc/$PID/stat ]
then
echo "No such process."
break
fi
consumption=(`awk '$1=="cpu" { cputot = $2+$3+$4+$5; } $1=='$PID' { cpupid = $14+$15+$16+$17; } END {printf "%d %d %.2f\n", cpupid, cputot, (cpupid-'${consumption[0]}')/(cputot-'${consumption[1]}')*100; }' /proc/stat /proc/$PID/stat`);
sleep 1
echo ${consumption[2]}
done
Le même en une ligne de commande :
PID=XXX; consumption=(0 0 0); while true; do if [ ! -e /proc/$PID/stat ]; then echo "No such process."; break; fi; consumption=(`awk '$1=="cpu" { cputot = $2+$3+$4+$5; } $1=='$PID' { cpupid = $14+$15+$16+$17; } END {printf "%d %d %.2f\n", cpupid, cputot, (cpupid-'${consumption[0]}')/(cputot-'${consumption[1]}')*100; }' /proc/stat /proc/$PID/stat`); sleep 1; echo ${consumption[2]}; done
(ne pas oublier de remplacer XXX par le PID du processus).
Quelques avertissements :
- le script ne prend pas en compte les cas où il y a plusieurs processeurs (prend le total, en fait, je crois) ;
- le script ne prend pas en compte iowait, irq, softirq, volée et guest (respectivement les champs 6 à 10 de la ligne « cpu » de /proc/stat, cf man proc), et je sais pas si c'est un bien ou un mal et j'ai la flemme de chercher (tout commentaire à ce sujet serait le bienvenu) ;
- le script confond utime, stime, cutime et cstime (cf man proc) : modifiez la définition de cpupid si vous voulez pinailler (ce sont respectivement les champs 14, 15, 16 et 17).
Quelques liens :
- un script similaire, entièrement en bash (mon idée de départ était de pouvoir le faire en une ligne de commande pour faire un alias plutôt qu'un script, donc ce script ne me satisfaisait pas, mais finalement je vois pas comment faire un alias de la ligne en question, donc retour au script…) ;
- des questions et des réponses plus ou moins intéressantes sur le sujet.
Edit : Pour rappel, pour trouver le PID d'un processus le plus simple est la commande pgrep, notamment avec les options -lf (par exemple « pgrep -lf fire » pour trouver firefox, cf man pgrep).
Dernière modification par Skippy le Grand Gourou (Le 17/04/2010, à 14:05)
Hors ligne
#2 Le 17/04/2010, à 14:35
- credenhill
Re : Connaître la consommation CPU d'un processus particulier
hello
et c'est une interface (n?)curses, qui la rend chiante à parser
utiliser top en mode batch -b
-d 2 toute les 2 secs, -n 1000 boucler 1000 fois, -p PID seulement PID
top -bn 1
top -bd 2 -n 1000 -p PID
Hors ligne
#3 Le 17/04/2010, à 15:04
- Skippy le Grand Gourou
Re : Connaître la consommation CPU d'un processus particulier
Ah ben oui, bizarre que cette réponse ne soit jamais donnée à ceux qui cherchent comment faire…
Merci.
Hors ligne