Je cherche à récupérer la charge cpu d'une machine avec un script shell. Dans ce script j'exécute le programme procinfo ; le problème est que les valeurs (en pourcentage) de user, nice et system et idle ne change pas...
en idle j'ai toujours 96.3% en user 3.1%... depuis 1 semaine avec des vérifications toutes les 5 minutes...
Quelqu'un voit pourquoi? procinfo ne metterai pas à jour ces valeurs? je trouverai étrange que ces valeurs ne changent jamais...
[root@machineA etc]# procinfo
Linux 2.6.12-1.1381_FC3smp (bhcompile@porky) (gcc 3.4.4 20050721 ) #1 SMP Fri Oct 21 04:03:26 EDT 2005 2CPU [machineA]
Memory: Total Used Free Shared Buffers
Mem: 4090092 1758620 2331472 0 404572
Swap: 2088408 1108 2087300
Bootup: Fri Mar 24 10:37:52 2006 Load average: 0.00 0.04 0.10 1/112 17251
user : 2d 12:18:04.52 3.1% page in : 0
nice : 0:14:50.69 0.0% page out: 0
system: 10:00:35.47 0.5% swap in : 0
idle : 77d 8:01:17.79 96.3% swap out: 0
uptime: 40d 3:21:57.83 context :3194903451
irq 0:3468461126 timer irq 12: 2271 i8042
irq 1: 76 i8042 irq 15: 31188994 ide1
irq 4: 2 irq169: 0 ohci_hcd:usb1, ohci_
irq 6: 3 irq177: 19706112 ioc0
irq 8: 23127 rtc irq185: 94011369 eth0
irq 9: 0 acpi
# charge moyenne
Posté par Ramón Perez (site web personnel) . Évalué à 1.
Depuis 40 jours que ta machine est allumée, elle a passé 96,3% de son temps en idle.
Si elle fait à peu près la même chose tous les jours, c'est normal que au bout d'une semaine, ces valeurs ne changent pas : une semaine plus tard, elle aura toujours passé 96.3% de son temps en idle.
Si tu veux la charge instantannée, utilise plutôt "uptime".
[^] # Re: charge moyenne
Posté par arn100 . Évalué à 1.
Si je n'm'abuse uptime ne me donne pas le pourcentage instantamné d'idle...
# uptime
15:48:29 up 40 days, 4:10, 2 users, load average: 0.02, 0.08, 0.08
la commande "sar" me le donne... mais seulement toutes les 10 minutes... La commande m'affiche un résumé de la charge depuis 0h00.
Je chercherais un moyenne plus restreinte (toutes les 5 minutes voir moins)
Cela existerait? Je sais que la charge instamné est accessible avec top... mais il doit bien y avoir des outils comme sar qui font des moyennes...
Merci de votre aide.
[^] # Re: charge moyenne
Posté par arn100 . Évalué à 1.
/usr/bin/sar | /usr/bin/tail -n 2 | /usr/bin/head -n 1 | /bin/sed 's/\ \ */ /g'
(PS: trouvé ici --> http://www.xenux.net/index.php?links=6&skin=&id=78)
je récupère le %tage moyen d'idle des 10 dernières minutes... J'aurais préféré récupérer le %tage moyen des 5 dernières si c'était possibles...
une idée?
[^] # Re: charge moyenne
Posté par dguihal . Évalué à 2.
[^] # Re: charge moyenne
Posté par arn100 . Évalué à 1.
mais merci pour ta commande car je ne la connaissais pas. :)
je cherche encore...
[^] # Re: charge moyenne
Posté par Olivier Jeannet . Évalué à 2.
Tu as la charge moyenne des 1, 5 et 15 dernières minutes avec par exemple "cat /proc/loadavg" ou la commande "w".
Pour la charge instantannée (ou moyennée sur la durée que tu veux), tu peux te servir du contenu du fichier /proc/stat, dont les champs sont mis à jour en permanence, de façon incrémentale et monotone (des compteurs donc). Par défaut sur ma machine (noyau 2.6.11-6mdk) c'est 100 fois par seconde (les ticks ou jiffies, je ne sais plus).
J'ai un script shell qui fait ça toutes les secondes pour adapter la vitesse du CPU à la charge instantanée (ou presque, la charge sur une seconde en fait) :
last_total_time=0
last_idle_time=0
while sleep 1 ; do
. procstat=($(grep cpu0 /proc/stat))
. user_time=${procstat[1]}
. nice_time=${procstat[2]}
. system_time=${procstat[3]}
. idle_time=${procstat[4]}
. idle_time=$[idle_time + nice_time]
. total_time=$[user_time + system_time + idle_time]
. total_elapsed=$[total_time - last_total_time]
. last_total_time=$total_time
. idle_elapsed=$[idle_time - last_idle_time]
. last_idle_time=$idle_time
. idle_ratio=$[100 * idle_elapsed / total_elapsed]
done
idle_ratio est une valeur entre 0 (CPU à 100%) et 100 (CPU idle), sur laquelle je fais des tests ensuite.
[^] # Re: charge moyenne
Posté par arn100 . Évalué à 1.
Ce n'est pas idéalement ce que je cherche à faire dans l'immédiat... mais ton script me servira surement par la suite... merci.
en fait je voudrait éviter "d'attendre" et avoir une moyenne sur quelques minutes (quitte également à faire des calculs)
J'utilise nagios pour ordonnancer l'exécution d'un script cherchant et affichant la charge cpu. Et, je pense qu'une vérification (c'est à dire une exécution du script) toutes les 5 minutes me paraît bien...
Pour l'instant mes vérifications se font que toutes les 10 minutes avec :
/usr/bin/sar | /usr/bin/tail -n 2 | /usr/bin/head -n 1 | /bin/sed 's/\ \ */ /g'
car "sar" me donne la charge moyenne "que" toute les 10 minutes et il est inutile pour moi de lancer le script avec un intervalle inférieur à 10 minutes. :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.