VMSTAT (virtual memory statistics) est un utilitaire de surveillance précieux, qui fournit également des informations sur l’activité de bloc I/O et de la CPU en plus de la mémoire.
C’est un très bon outil pour mesurer les performances de Linux ou encore investiguer en cas de load average important.
Dans ce tutoriel, je vous donne quelques exemples d’utilisation de VMStat.

Table des matières
VMStat : Mesures de performance Linux
Pour mieux comprendre VMStat, je vous conseille de lire ce tutoriel qui vous explique le fonctionnement des processus sur Linux :
L’utilitaire VMStat n’est pas intégré directement au système mais disponible dans les dépôts de la plupart des distributions Linux.
Ainsi, vous pouvez l’installer avec APT ou Yum/DNF :
apt install vmstat
yum install vmstat
Utilisation basique de VMStat
La commande VMStat fonctionne avec deux options numériques :
- 1 -> Les valeurs seront ré-mesurées et signalées chaque seconde
- 5 -> Les valeurs seront rapportées cinq fois, puis le programme arrêtera
vmstat 1 5
Les sorties s’affichent en colonne avec memory, swap, io, system et cpu et différents compteurs en dessous.
debian@linux:~$ sudo vmstat 1 5
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 189184 171728 46388 7632756 0 0 0 66 2 2 0 0 100 0 0
0 0 189184 171800 46388 7632776 0 0 0 0 144 120 0 0 100 0 0
0 0 189184 171124 46388 7632784 16 0 16 0 81 154 0 0 100 0 0
0 0 189184 171124 46388 7632784 0 0 0 0 92 110 0 0 100 0 0
0 0 189184 171124 46396 7632784 0 0 0 20 104 138 0 0 100 1 0
Lire la sortie VMStat
Voici des explications afin de bien comprendre le contenu de VMStat :
- Procs
- R: Le nombre de processus en attente de temps d’exécution
- B: le nombre de processus dans un sommeil ininterrompt
- Memory
- swpd: la quantité de mémoire virtuelle utilisée
- free: la quantité de mémoire inactive
- buff: la quantité de mémoire utilisée comme tampons
- Cache: la quantité de mémoire utilisée comme cache
- Inact: la quantité de mémoire inactive. (-A option)
- Act: la quantité de mémoire active. (-A option)
- SWAP
- si: quantité de mémoire échangée dans le disque (/ s)
- so: quantité de mémoire échangée sur disque (/ s)
- I/O
- bi: blocs reçus d’un dispositif de bloc (blocs / s) – lecture
- bo: blocs envoyés à un périphérique de bloc (blocs / s) – écriture
- System
- in: le nombre d’interruptions par seconde, y compris l’horloge
- cs: Nombre de commutateurs de contexte par seconde
- CPU
- us: le temps passé à exécuter du code non-noyau. (temps utilisateur, y compris beau temps)
- sy: le temps passé au courant du noyau. (Le temps du système)
- id: Le temps passé au ralenti. Avant Linux 2.5.41, cela inclut le temps d’attente IO-Wait.
- wa: Le temps passé à attendre Io. Avant que Linux 2.5.41, inclus dans oisif.
- st: temps volé à partir d’une machine virtuelle. Avant Linux 2.6.11, inconnu
Reportez-vous au man vmstat pour plus de détails.
Exemple d’utilisation de VMStat
Forte Charge CPU
Les fortes charge CPU avec les colonnes cs, us, sy.
Clea génère aussi des interruptions systèmes dans les colonnes in, css.
On peut très vite atteindre de fortes valeurs selon la charge de travail du système.
Pour identifier le processus, vous pouvez utiliser des outils tels que top, atop, htop, glances, … :
I/O important en lecture et écriture
Il faut vérifier les colonnes bi et bo de la partie IO.
Lors d’une forte écriture sur le disque, il faut regarder la colonne bo :
debian@linux:~$ sudo vmstat 1 5
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 188416 5238876 100704 2508260 0 0 0 66 2 2 0 0 100 0 0
0 1 188416 5155776 100708 2591448 0 0 0 143360 631 198 0 7 89 4 0
1 0 188416 5155776 100712 2591456 0 0 0 184320 290 160 0 1 89 10 0
0 0 188416 5155948 100720 2591472 0 0 0 184320 289 163 0 2 89 10 0
0 0 188416 5156036 100728 2591472 0 0 0 60 85 104 0 0 100 1 0
Pour des statistiques d’utilisation disques, utilisez l’option -d :
debian@linux:~$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 61712 24008 4204866 2808803 1127893 641682 957160808 29629244 0 2642
vmstat peut aussi afficher la table de disque, c’est avec l’option -D :
debian@linux:~$ vmstat -D
1 disks
3 partitions
61712 total reads
24008 merged reads
4204866 read sectors
2808803 milli reading
1127924 writes
641707 merged writes
957161256 written sectors
29629453 milli writing
0 inprogress IO
2642 milli spent IO
Enfin pour réduire les statistiques à une partition de disque précise, c’est avec l’option -p :
debian@linux:~$ vmstat -p /dev/sda1
sda1 reads read sectors writes requested writes
48621 3899602 1093422 956464736
CPU en attente d’I/O
debian@linux:~$ sudo vmstat 1 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 1 188416 5156540 100640 2591544 0 0 0 66 2 2 0 0 100 0 0
0 0 188416 5156540 100640 2591548 0 0 0 0 174 146 0 0 100 0 0
0 0 188416 5156540 100640 2591548 0 0 0 0 56 85 0 0 100 0 0
0 0 188416 5156540 100640 2591548 0 0 0 0 78 99 0 0 100 0 0
0 0 188416 5156540 100648 2591540 0 0 0 52 65 99 0 0 99 1 0
Afficher la table VM
La table VM regroupe les informations de virtualisation de la VM et les pages de mémoires.
On peut afficher les statistiques avec l’option -s.
debian@linux:~$ vmstat -s
8067272 K total memory
220408 K used memory
678732 K active memory
2349092 K inactive memory
4732848 K free memory
101984 K buffer memory
3012032 K swap cache
524284 K total swap
179968 K used swap
344316 K free swap
484247 non-nice user cpu ticks
106 nice user cpu ticks
354485 system cpu ticks
720231217 idle cpu ticks
651172 IO-wait cpu ticks
0 IRQ cpu ticks
23378 softirq cpu ticks
0 stolen cpu ticks
2102433 pages paged in
478581224 pages paged out
36343 pages swapped in
87293 pages swapped out
143702352 interrupts
185097588 CPU context switches
1626377118 boot time
351954 forks
Afficher slabinfo
Pour afficher les statistiques de slabinfo qui sont les obets fréquemment utilisés dans le noyau Linux (têtes tampons, inodes, dentries, etc.) ont leur propre cache.
vmstat retravaille le contenu du fichier /proc/slabinfo donne des statistiques sur ces caches.
Cela nécessite les accès root, on lance donc la commande avec sudo.
debian@linux:~$ sudo vmstat -m
Cache Num Total Size Pages
kcopyd_job 0 0 3312 9
dm_uevent 0 0 2632 12
isofs_inode_cache 24 24 656 24
kvm_async_pf 0 0 136 30
kvm_vcpu 0 0 23744 1
kvm_mmu_page_header 0 0 184 22
ext4_groupinfo_4k 14924 14924 144 28
ext4_inode_cache 83450 90510 1088 30
ext4_allocation_context 128 128 128 32
ext4_io_end 1728 1728 64 64
ext4_extent_status 14688 14688 40 102
mbcache 1168 1168 56 73
jbd2_journal_head 646 782 120 34
jbd2_revoke_table_s 256 256 16 256
fscrypt_info 3712 3712 32 128
fscrypt_ctx 340 340 48 85
sd_ext_cdb 128 128 32 128
scsi_sense_cache 224 224 128 32
PINGv6 0 0 1152 28
RAWv6 168 168 1152 28
UDPv6 375 375 1280 25
tw_sock_TCPv6 51 51 240 17
request_sock_TCPv6 0 0 304 26
TCPv6 84 84 2304 14
sgpool-128 8 8 4096 8
cfq_io_cq 0 0 120 34
mqueue_inode_cache 102 102 960 17
userfaultfd_ctx_cache 0 0 192 21
dnotify_struct 0 0 32 128
posix_timers_cache 68 68 240 17
UNIX 1280 1280 1024 16
ip4-frags 0 0 208 19
secpath_cache 64 64 128 32
xfrm_dst_cache 0 0 320 25
xfrm_state 0 0 768 21
PING 0 0 960 17
RAW 102 102 960 17
tw_sock_TCP 527 527 240 17
request_sock_TCP 104 104 304 26
TCP 150 150 2176 15
hugetlbfs_inode_cache 100 100 632 25
dquot 288 288 256 16
eventpoll_pwq 1680 1680 72 56
inotify_inode_mark 1377 1377 80 51
dax_cache 21 21 768 21
request_queue 13 13 2512 13
blkdev_requests 0 0 312 26
blkdev_ioc 156 156 104 39
biovec-max 38 48 8192 4
biovec-128 128 160 2048 16
biovec-64 64 64 1024 16
user_namespace 0 0 464 17
dmaengine-unmap-256 15 15 2112 15
dmaengine-unmap-128 30 30 1088 30
dmaengine-unmap-16 252 252 192 21
dmaengine-unmap-2 7265 14592 64 64
Cache Num Total Size Pages
sock_inode_cache 2438 2438 704 23
skbuff_fclone_cache 192 192 512 16
skbuff_head_cache 2432 2448 256 16
file_lock_cache 80 80 200 20
net_namespace 25 25 6336 5
shmem_inode_cache 1605 1932 712 23
taskstats 96 96 328 24
proc_dir_entry 987 987 192 21
pde_opener 5508 5508 40 102
proc_inode_cache 6293 7920 680 24
sigqueue 125 125 160 25
bdev_cache 57 57 832 19
kernfs_node_cache 24581 24780 136 30
mnt_cache 714 714 384 21
filp 9571 10144 256 16
inode_cache 15524 15860 608 26
dentry 107226 115836 192 21
names_cache 56 56 4096 8
iint_cache 0 0 120 34
buffer_head 398836 413595 104 39
uts_namespace 0 0 440 18
vm_area_struct 20742 21242 208 19
mm_struct 1950 1950 1088 30
files_cache 1449 1449 704 23
signal_cache 2040 2040 1088 30
sighand_cache 1140 1140 2112 15
task_struct 1134 1144 3840 8
cred_jar 3150 3150 192 21
anon_vma_chain 39165 39296 64 64
anon_vma 22082 22218 88 46
pid 3235 3328 128 32
Acpi-Operand 2800 2800 72 56
Acpi-Parse 365 365 56 73
Acpi-State 204 204 80 51
Acpi-Namespace 2448 2448 40 102
numa_policy 680 680 24 170
trace_event_file 1564 1564 88 46
ftrace_event_field 3740 3740 48 85
pool_workqueue 247 288 256 16
radix_tree_node 37369 42700 584 28
task_group 100 100 640 25
dma-kmalloc-8192 0 0 8192 4
dma-kmalloc-4096 0 0 4096 8
dma-kmalloc-2048 0 0 2048 16
dma-kmalloc-1024 0 0 1024 16
dma-kmalloc-512 0 0 512 16
dma-kmalloc-256 0 0 256 16
dma-kmalloc-128 0 0 128 32
dma-kmalloc-64 0 0 64 64
dma-kmalloc-32 0 0 32 128
dma-kmalloc-16 0 0 16 256
dma-kmalloc-8 0 0 8 512
dma-kmalloc-192 0 0 192 21
dma-kmalloc-96 0 0 96 42
kmalloc-8192 76 76 8192 4
kmalloc-4096 797 840 4096 8
Cache Num Total Size Pages
kmalloc-2048 1376 1472 2048 16
kmalloc-1024 2600 2768 1024 16
kmalloc-512 2336 2464 512 16
kmalloc-256 776 864 256 16
kmalloc-192 6142 6153 192 21
kmalloc-128 2067 2080 128 32
kmalloc-96 7179 7266 96 42
kmalloc-64 14055 15872 64 64
kmalloc-32 24170 25216 32 128
kmalloc-16 15104 15104 16 256
kmalloc-8 15360 15360 8 512
kmem_cache_node 4480 4480 64 64
kmem_cache 2664 3360 384 21
Liens
- Utiliser la commande PS pour lister les processus sur Linux avec des exemples
- Signaux UNIX: SIGILL, SIGHUP, SIGINT, …
- VMStat : Mesures de performance Linux
- Top : lister les processus sur Linux
- Commande PS : lister les processus sur Linux
- Commande pgrep sur Linux : utilisation et exemples
- Utiliser la commande Kill, Killall, pkill pour arrêter un processus sur Linux
- Comment utiliser les commandes nice et renice sur Linux pour définir des priorités de processus
- Comment trouver et tuer un processus Zombie sur Linux (Defunct)
- 6 exemples d’utilisation de la commande Kill sur Linux
- Qu’est-ce que le load average sur Linux
- Mesurer le débit et lister les connexions réseaux sur Linux
- La mémoire sur Linux : comment ça marche