Performance : 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 :

procsRapports sur les éléments suivants :



memoryRapports sur l'utilisation de la mémoire :



swapRapports sur l'utilisation de la swap :



ioRapports sur l'utilisation du disque :



cpuRapports sur l'utilisation du processeur :



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 :
#!/usr/bin/perl
while (<>) {
        $time = qx(date "+%H:%M:%S");
        chomp($time);
        print $time . ": $_";
}
 


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