Menu Fermer

VMStat : Mesures de performance Linux

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.

VMStat : Mesures de performance Linux

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.

[email protected]:~$ 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.

Forte Charge CPU sur vmstat

On peut très vite atteindre de fortes valeurs selon la charge de travail du système.

Forte Charge CPU sur vmstat

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 :

[email protected]:~$ 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
I/O important en lecture et écriture sur vmstat

Pour des statistiques d’utilisation disques, utilisez l’option -d :

[email protected]:~$ 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 :

[email protected]:~$ 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 :

[email protected]:~$ vmstat -p /dev/sda1
sda1            reads      read sectors      writes  requested writes
                48621           3899602     1093422         956464736

CPU en attente d’I/O

[email protected]:~$ 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
CPU en attente d'I/O sur vmstat

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.

[email protected]:~$ 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.

[email protected]:~$ 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