vmstat : Surveillance système en temps réel
Table des matières
Cet article est un super récapitulatif des outils de performances et d'analyse, bien souvent livrés avec une distribution Linux.
Zoom sur ceux-ci et explications
La commande vmstat permet de générer des rapports sur les statistiques de mémoire virtuelle et sur les informations sur les événements système telles que la charge CPU, la pagination, le nombre de changements de contexte, les interruptions de périphérique et les appels système. La commande vmstat permet également d'afficher les statistiques sur la permutation, la purge du cache et les interruptions.
Elle s'utilise simplement :
Il est possible de passer des nombres en paramètres, de telle façon que
Voici un exemple concret de relevés toutes les 2 secondes, 5 fois :
Apportons quelques explications sur les différentes parties :
<fieldset class="formatter-container formatter-fieldset" style=""><legend>procs</legend><div class="formatter-content">Rapports sur les éléments suivants :
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>memory</legend><div class="formatter-content">Rapports sur l'utilisation de la mémoire :
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>swap</legend><div class="formatter-content">Rapports sur l'utilisation de la swap :
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>io</legend><div class="formatter-content">Rapports sur l'utilisation du disque :
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>cpu</legend><div class="formatter-content">Rapports sur l'utilisation du processeur :
</div></fieldset>
Il est possible de collecter périodiquement en tâche de fond ces mesures via un script que voici :
Et placer la ligne suivante dans crontab pour l'exécuter tous les jours à minuit avec un relevé toute les 5 secondes :
Si on souhaite avoir l'heure de chaque relevé, sous AIX, on peut utiliser l'option -t.
Sous Linux, elle n'est pas disponible.
On peut alors bricoler :
Un script perl qui retourne l'heure :
Et on appelle vmstat que l'on pipe dans le script :
Introduction
Cet article est un super récapitulatif des outils de performances et d'analyse, bien souvent livrés avec une distribution Linux.
Zoom sur ceux-ci et explications
Les outils
vmstat
La commande vmstat permet de générer des rapports sur les statistiques de mémoire virtuelle et sur les informations sur les événements système telles que la charge CPU, la pagination, le nombre de changements de contexte, les interruptions de périphérique et les appels système. La commande vmstat permet également d'afficher les statistiques sur la permutation, la purge du cache et les interruptions.
Elle s'utilise simplement :
Code BASH :
adrien@oxygen ~ $ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 450860 148752 79152 881524 0 0 0 1 0 1 9 7 83 1 0
Il est possible de passer des nombres en paramètres, de telle façon que
Code BASH :
vmstat $INTERVAL $NOMBRE
Voici un exemple concret de relevés toutes les 2 secondes, 5 fois :
Code BASH :
adrien@oxygen ~ $ vmstat 2 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 450860 148752 79152 881524 0 0 0 1 0 1 9 7 83 1 0 0 0 450860 148744 79152 881528 0 0 0 8 974 1995 12 5 83 0 0 0 0 450860 148712 79152 881528 0 0 0 0 947 1884 9 8 83 0 0 0 0 450860 148712 79152 881528 0 0 0 6 961 1985 9 7 84 0 0 0 0 450860 148712 79152 881528 0 0 0 316 938 1899 11 6 82 1 0
Apportons quelques explications sur les différentes parties :
<fieldset class="formatter-container formatter-fieldset" style=""><legend>procs</legend><div class="formatter-content">Rapports sur les éléments suivants :
- r : La « runqueue » : file de thread prêt à être (ou déjà) en mode « run » - en attente de ressource cpu. Appelée aussi la charge système générale (load average)
- b : La « waitqueue » (notée b pour block) : nombre de thread en attente de ressource autre que la cpu. Ex : disque, mémoire, réseau, etc.
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>memory</legend><div class="formatter-content">Rapports sur l'utilisation de la mémoire :
- swapd : Espace de swap utilisé
- free : Mémoire disponible
- buff : Mémoire utilisée en buffer
- cache : Mémoire utilisée en cache
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>swap</legend><div class="formatter-content">Rapports sur l'utilisation de la swap :
- si : « Swap In » : Mémoire déchargée du SWAP vers la RAM par seconde
- so : « Swap Out » : Mémoire déchargée de la RAM vers la SWAP par seconde
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>io</legend><div class="formatter-content">Rapports sur l'utilisation du disque :
- bi : « Block In » : Lecture sur les périphériques blocs (disques durs) en blocs/s
- bo : « Block Out » : Écriture sur les périphériques blocs (disques durs) en blocs/s
</div></fieldset>
<fieldset class="formatter-container formatter-fieldset" style=""><legend>cpu</legend><div class="formatter-content">Rapports sur l'utilisation du processeur :
- us : « Temps Utilisateur » : Opérations lancées en mode utilisateur : les programmes applicatifs, calcul, etc.
- sy : « Temps Système » : Opérations lancées en mode kernel : création de socket, ouverture de fichier, etc.
- id : « Idle » : Temps où le processeur ne fait rien
- wa : « Wait» : En attente de ressource (disque, réseau...)
</div></fieldset>
Il est possible de collecter périodiquement en tâche de fond ces mesures via un script que voici :
Code BASH :
#!/bin/bash DATE=`date +"%Y-%m-%d"`​ if [ ! –d /var/log/vmstat ] ; then mkdir /var/log/vmstat ; fi /usr/bin/vmstat $1 $2 > /var/log/vmstat/vmstat.$DATE
Et placer la ligne suivante dans crontab pour l'exécuter tous les jours à minuit avec un relevé toute les 5 secondes :
Code BASH :
00 00 * * * /root/batch/vmstat_recolte.sh 5 17280
Si on souhaite avoir l'heure de chaque relevé, sous AIX, on peut utiliser l'option -t.
Sous Linux, elle n'est pas disponible.
On peut alors bricoler :
Un script perl qui retourne l'heure :
Code PERL :
Et on appelle vmstat que l'on pipe dans le script :
Code BASH :
adrien@oxygen ~ $ vmstat 1 5 | ./timestamp.pl 11:21:19: procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- 11:21:19: r b swpd free buff cache si so bi bo in cs us sy id wa st 11:21:19: 2 0 450860 142508 79864 888100 0 0 0 1 0 1 9 7 83 1 0 11:21:20: 0 0 450860 142828 79864 888100 0 0 0 0 982 1965 13 8 80 0 0 11:21:21: 0 0 450860 142852 79864 888096 0 0 0 8 962 1894 10 8 82 0 0 11:21:22: 0 0 450860 142852 79864 888096 0 0 0 0 906 1908 11 7 82 0 0 11:21:23: 0 0 450860 143100 79864 888096 0 0 0 0 982 1915 9 7 84 0 0