Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 sad ) 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 wink

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 wink

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 hmm

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 hmm

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 smile
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 hmm 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 sad

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