vmstat : Surveillance système en temps réel
Table des matières
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.
Cette commande s'utilise simplement :
Ce qui produit ce type de retour :
Afin d'afficher les informations à intervalle régulier, on pourra le spécifier. Sans autre information, le défilement est illimité. On pourra spécifier une deuxième valeur pour un nombre maximal de relevés.
Voici un exemple de 5 relevés avec une collecte toute les 1 seconde :
Voici le résultat produit :
Apportons quelques explications sur les différentes parties :
Notez que plus les relevés sont nombreux, plus l'affichage peut partir en désordre.
Il est possible d'utiliser l'option -w qui permet d'afficher la sortie de façon moins condensée :
Depuis quelques années, l'option -t a fait son apparition et permet d'afficher la date et heure de la collecte :
Par défaut, lorsque les entêtes ne sont plus affichées à l'écran, celles-ci sont affichées à nouveau.
Si on utilise la commande vmstat à travers un script, on pourra éviter que ces entêtes se répètent avec l'option -n :
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 :
Pour exporter des résultats en CSV, on va générer les informations comme nous le souhaitons avec la commande vmstat, sans répéter les entêtes.
Voici un exemple avec 5 relevés à I seconde avec le timestamp :
Ensuite, on pourra avec awk convertir le fichier en CSV facilement.
Si on veut les entêtes de colone (ici je récupère juste l'heure) :
Si on ne veut que les valeurs (ici je récupère juste l'heure) :
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 créer un script perl qui retourne l'heure :
Et on appelle vmstat que l'on pipe dans le script précédemment créé :
Ce qui donne ceci :
Introduction
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.
Utilisation
Usage simple
Cette commande s'utilise simplement :
Code BASH :
vmstat
Ce qui produit ce type de retour :
Code TEXT :
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 0 9181216 215868 2993660 0 0 1650 463 6600 6 5 1 94 0 0
Afin d'afficher les informations à intervalle régulier, on pourra le spécifier. Sans autre information, le défilement est illimité. On pourra spécifier une deuxième valeur pour un nombre maximal de relevés.
Voici un exemple de 5 relevés avec une collecte toute les 1 seconde :
Code BASH :
vmstat 1 5
Voici le résultat produit :
Code :
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 8687764 343396 3150200 0 0 1300 429 6997 6 4 3 92 0 0
2 0 0 8702416 343396 3150200 0 0 0 0 8049 9436 3 9 88 0 0
4 0 0 8676232 343404 3153600 0 0 0 64 10548 12319 4 10 86 0 0
3 0 0 8692444 343404 3153144 0 0 0 0 6719 7932 1 9 90 0 0
2 0 0 8707364 343404 3140856 0 0 0 0 7490 9124 2 9 90 0 0
Apportons quelques explications sur les différentes parties :
Quelques options utiles
Notez que plus les relevés sont nombreux, plus l'affichage peut partir en désordre.
Il est possible d'utiliser l'option -w qui permet d'afficher la sortie de façon moins condensée :
Code BASH :
vmstat -w 1 5
Depuis quelques années, l'option -t a fait son apparition et permet d'afficher la date et heure de la collecte :
Code BASH :
vmstat -t 1 5
Par défaut, lorsque les entêtes ne sont plus affichées à l'écran, celles-ci sont affichées à nouveau.
Si on utilise la commande vmstat à travers un script, on pourra éviter que ces entêtes se répètent avec l'option -n :
Code BASH :
vmstat -n 1 60
Interfaçage avec des scripts
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 -n -t $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/scripts/vmstat_recolte.sh 5 17280
Sortir les résultats en CSV
Pour exporter des résultats en CSV, on va générer les informations comme nous le souhaitons avec la commande vmstat, sans répéter les entêtes.
Voici un exemple avec 5 relevés à I seconde avec le timestamp :
Code BASH :
vmstat -t -n 1 5 > vmstat.txt
Ensuite, on pourra avec awk convertir le fichier en CSV facilement.
Si on veut les entêtes de colone (ici je récupère juste l'heure) :
Code BASH :
awk 'NR > 1 { print $1 "," $2 "," $3 "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "," $10 "," $11 "," $12 "," $13 "," $14 "," $15 "," $16 "," $17 "," $19 }' vmstat.txt > vmstat.csv
Si on ne veut que les valeurs (ici je récupère juste l'heure) :
Code BASH :
awk 'NR > 2 { print $1 "," $2 "," $3 "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "," $10 "," $11 "," $12 "," $13 "," $14 "," $15 "," $16 "," $17 "," $19 }' vmstat.txt > vmstat.csv
Astuces archivées
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 créer un script perl qui retourne l'heure :
Code PERL :
Et on appelle vmstat que l'on pipe dans le script précédemment créé :
Code BASH :
vmstat 1 5 | ./timestamp.pl
Ce qui donne ceci :
Code TEXT :
18:46:46: procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- 18:46:46: r b swpd free buff cache si so bi bo in cs us sy id wa st 18:46:46: 4 1 0 8799148 346640 3134508 0 0 1085 397 7101 6 4 4 92 0 0 18:46:47: 2 0 0 8795564 346640 3139300 0 0 2960 296 6735 7750 1 9 90 0 0 18:46:48: 2 0 0 8800760 346656 3137236 0 0 0 540 7521 9739 1 9 90 0 0 18:46:49: 2 0 0 8813152 346680 3139300 0 0 0 508 7679 9329 2 9 89 0 0 18:46:50: 2 0 0 8816244 346688 3137252 0 0 0 152 6117 7180 1 9 90 0 0