#1 Le 17/05/2007, à 11:14
- dark_vidor
La commande Top, demande d'explications
Bonjour à tous,
Pour un script je suis ammené a utiliser la commande top de la manière suivante :
top -b -d 1 -n 11 | grep Cpu
En effet top -b -n 1 retourne toujours la meme chose (étonant non ?)
Je me retourne donc 11 lignes à l'intervalle d'une seconde pour chaque et je ne prend pas en compte la premiere
J'utilise php pour exploiter le resultat :
exec('top -b -d 1 -n 11 | grep Cpu', $array);
unset($array[0]);
echo '<pre>';
print_r($array);
echo '</pre>';
foreach($array as $v)
{
$line = explode(" ", $v);
echo '<pre>';
print_r($line);
echo '</pre>';
}
c'est très rudimentaire pour le moment.
J'ai dans l'idée de faire des stats sur l'utilisation du processeur mais j'ai beau regarder dans le man de la commande top (je hais sheakspear !) sur le net (google est pas mon ami ce coup ci ) je ne trouve rien
(j'utiliserai en parallèle le cat /proc/loadavg)
Mon prof de linux me dit de prendre la variable %id ? il me dit que c'est la mémoire libre, pourtant quand je compare l'utilisation CPU indiqué dans le moniteur system et le 100-%id ... ça correspond pas :s
Petite précision : Je suis sous Ubuntu 7.04
Pouvez vous m'éclairer ? Merci
Hors ligne
#2 Le 17/05/2007, à 11:27
- phlinux
Re : La commande Top, demande d'explications
Pour moi le %id indique c'est plutôt le "Idle" du cpu soit le tps passé par le CPU à ne rien faire.
(on peut aussi utiliser vmstat 1 11, qui est peut etre plus concis)
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#3 Le 17/05/2007, à 12:39
- dark_vidor
Re : La commande Top, demande d'explications
heu d'accord, mais je dois prendre en compte quelle(s) colone(s) pour faire mes stats processeurs ?
Je veux savoir a cb le processeur est utilisé (ou non utilisé je ferais 1-% ou 100-% ...)
Hors ligne
#4 Le 17/05/2007, à 13:17
- phlinux
Re : La commande Top, demande d'explications
Par ex, j'ai ici :
Cpu(s): 5.4% us, 0.0% sy, 0.0% ni, 94.6% id, 0.0% wa, 0.0% hi, 0.0% si
Us (Utilisé user) : 5,4%
Sy (Utilisé systeme) : 0.0%
Id (Non utilisé) : 94.6%
Wa (attente entrees/sorties) : 0.0%
A priori, on devrait avoir Us + Sy + Id + Wa = 100%
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#5 Le 17/05/2007, à 13:49
- dark_vidor
Re : La commande Top, demande d'explications
donc dans ce cas le plus simple est de recuperer le %id ... et de faire 100 - %id
Merci beaucoup
Voici ce que j'ai donc developpé
#-----[ Temps Execution ]----------
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
function temps_execution()
{
global $time_start;
$time_end = microtime_float();
$time = $time_end - $time_start;
$time = substr($time, 0, strpos($time, ".")).substr(strstr($time, '.'), 0 , 3);
return $time;
//echo "<p>Page générée en $time secondes</p>";
}
exec('top -b -d 1 -n 11 | grep Cpu', $array);
unset($array[0]);
echo '<pre>';
print_r($array);
echo '</pre>';
$us = array();
foreach($array as $a)
{
$line = explode(" ", $a);
foreach($line as $l)
{
if( strstr($l, '%id') )
{
$var_us = explode("%", $l);
array_push( $us, $var_us[0]);
}
}
}
echo '<pre>';
print_r($us);
echo '</pre>';
$moy = 0;
$nb_v = 0;
$max = $us[0];
$min = $us[0];
foreach($us as $v)
{
if( !empty( $v ) )
{
if( $v > $max) $max = $v;
if( $v < $min) $min = $v;
$moy+= $v;
$nb_v ++;
}
}
echo 'Utilisation moyenne du Cpu au cours des '.temps_execution().' secondes : '.(100-($moy/$nb_v)).'<br>';
echo 'Min : '.(100-$max).' - Max : '.(100-$min);
par contre rien que ce script prends 10% de resources CPU ...
Dernière modification par dark_vidor (Le 17/05/2007, à 13:51)
Hors ligne
#6 Le 17/05/2007, à 14:14
- Watchwolf
Re : La commande Top, demande d'explications
sinon tu peut regarder les source de top. Parfois il est plus pratique de réécrire une partie du code d'une commande afin de l'utiliser directement dans son source. Et donc ne plus avoir à executer de commande.
enfin la je pense que tu peut t'en tirer en utilisant la commande si tu veut juste faire quelque chose de simple.
Dernière modification par Watchwolf (Le 17/05/2007, à 14:14)
Hors ligne
#7 Le 17/05/2007, à 14:20
- dark_vidor
Re : La commande Top, demande d'explications
et ou es ce qu'on peut les trouver ces sources ?
Hors ligne
#8 Le 17/05/2007, à 16:16
- phlinux
Re : La commande Top, demande d'explications
Si le tps est un peu long, il est possible d'utiliser awk qui peut etre plus rapide qu'un grep :
exemple :
top -b -d 1 -n 11 | awk '$1 ~ /^Cpu/ {printf("%d %\n"),100-$10;}'
Ceci dit, cette mesure 100 - Idle ne represente qu'une consommation globale, tous processus confondus. S'il y a de la pagination (swap) et des contentions sur un disque le Wa (wait) va augmenter sans pour autant que le CPU soit mis à contribution puisqu'il est en attente du controleur de disque. Tout dépend donc de ce qu'on veut faire de cette mesure.
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#9 Le 17/05/2007, à 16:26
- dark_vidor
Re : La commande Top, demande d'explications
on dirait qu'elle consomme plus de ressource cette méthode
Hors ligne
#10 Le 17/05/2007, à 18:01
- phlinux
Re : La commande Top, demande d'explications
Et en filtrant sur un vmstat ??? (il est moins verbeux)
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#11 Le 17/05/2007, à 19:36
- dark_vidor
Re : La commande Top, demande d'explications
vmstat est moins précis ... ou alors je sais pas l'utilisé
Hors ligne
#12 Le 18/05/2007, à 11:49
- phlinux
Re : La commande Top, demande d'explications
vmstat donne le meme genre d'information, la liste des daemons, qui n'est pas utilisée ici, en moins.
Tu peux essayer par exemple (recurrence 11, intervalle 1s) :
vmstat -n 1 11 | awk '$1 ~ /^[[:digit:]]+/ {print 100 - $15}'
en utilisant time on peux voir les consommations extactes (reelle, user et sys) de cette commande. Elle est moins gourmande que les deux premieres.
ex: time vmstat -n .....
Dernière modification par phlinux (Le 18/05/2007, à 11:50)
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#13 Le 18/05/2007, à 12:16
- dark_vidor
Re : La commande Top, demande d'explications
ta ligne de commande ne fonctionne pas sous mon ubuntu 7.04
Hors ligne
#14 Le 18/05/2007, à 13:00
- phlinux
Re : La commande Top, demande d'explications
Pas de pb, j'utilise aussi ubuntu....et c'est un grand classique d'unix !
Est ce que le paquet procps est installé ? (apt-cache search procps)
Que répond un which vmstat ?
Sinon, quel est le message d'erreur ?
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#15 Le 18/05/2007, à 13:05
- dark_vidor
Re : La commande Top, demande d'explications
sudo apt-cache search procps
procps - /proc file system utilities
/usr/bin/vmstat
voila
y'a pas de message d'erreur c'est juste que ça affiche rien ...
Hors ligne
#16 Le 18/05/2007, à 13:21
- phlinux
Re : La commande Top, demande d'explications
et si tu executes seulement :
vmstat -n 1 11
qu'est ce que cela dit ??
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#17 Le 18/05/2007, à 13:23
- dark_vidor
Re : La commande Top, demande d'explications
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 114064 9012 62780 173908 4 16 91 56 602 1521 20 2 76 2
4 0 114064 9044 62780 173908 0 0 0 0 5396 14726 14 8 78 0
1 0 114064 9044 62788 173900 0 0 0 128 5454 14808 12 11 76 1
Hors ligne
#18 Le 18/05/2007, à 13:27
- phlinux
Re : La commande Top, demande d'explications
ok, le problème c'est le filtre.... la commande awk executée n'est sans doute pas correcte.
Je viens de renvoyer ta sortie sur le filtre que je te propose par un copier/coller et ça fonctionne.
As tu bien recopié toute la ligne ? (elle se termine par une simple quote)
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#19 Le 18/05/2007, à 13:30
- dark_vidor
Re : La commande Top, demande d'explications
oui j'ai bien copier mais non ça veux pas moi :s
Hors ligne
#20 Le 18/05/2007, à 13:34
- phlinux
Re : La commande Top, demande d'explications
Alors on va retirer le filtre qui élimine les 2 premieres lignes...
en utilisant :
vmstat -n 1 11 | awk '{print 100 - $15}'
qu'est ce que cela donne ?
Dernière modification par phlinux (Le 18/05/2007, à 13:35)
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#21 Le 18/05/2007, à 13:36
- dark_vidor
Re : La commande Top, demande d'explications
vmstat -n 1 11 | awk '{print 100 - $15}'
100
100
24
47
47
44
45
49
44
47
43
45
48
Hors ligne
#22 Le 18/05/2007, à 13:42
- phlinux
Re : La commande Top, demande d'explications
Ah, c'est mieux. Le problème est donc au niveau de ce préfiltre.
Ici, les deux premières lignes avec 100 sont erronnées et dûes aux entêtes des 2 premières lignes.
Les autres lignes répondent au calcul 100 - colonne Id (% cpu idle)
il y a peut être des blancs en debut de ligne:
essaie :
vmstat -n 1 11 | awk '$1 ~ /^ *[[:digit:]]+/ {print 100 - $15}'
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#23 Le 18/05/2007, à 13:43
- dark_vidor
Re : La commande Top, demande d'explications
rien
Hors ligne
#24 Le 18/05/2007, à 13:46
- phlinux
Re : La commande Top, demande d'explications
Damned !!!
Que donne :
vmstat -n 1 11 | awk '$1 ~ /^[0-9]+/ {print 100 - $15}'
Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670
Hors ligne
#25 Le 18/05/2007, à 13:49
- dark_vidor
Re : La commande Top, demande d'explications
vmstat -n 1 11 | awk '$1 ~ /^[0-9]+/ {print 100 - $15}'
25
7
11
14
11
14
15
11
14
13
11
et donc la j'ai direct mon utilisation CPU
Par contre la ligne 1 est toujours à 25 ?
Hors ligne