Linux vmstat commando tutorial voor beginners (5 voorbeelden)

Als je op zoek bent naar een commandoregel-hulpprogramma waarmee je informatie over processen, CPU-activiteit, geheugen en meer kunt opvragen, dan zul je blij zijn te weten dat vmstat dit voor je doet.

In dit artikel zullen we de basis van dit gereedschap bespreken aan de hand van enkele eenvoudig te begrijpen voorbeelden. Maar voordat we dat doen, is het de moeite waard te vermelden dat alle voorbeelden in dit artikel zijn getest op een Ubuntu 20.04 LTS machine, maar het zal ook werken op CentOS en Debian.

Linux vmstat commando

Het vmstat commando in Linux geeft statistieken van het virtuele geheugen. Hieronder volgt de syntaxis:

vmstat [options] [delay [count]]

En hier is hoe de man pagina van de tool het uitlegt:

       vmstat  reports  information about processes, memory, paging, block IO,
       traps, disks and cpu activity.

       The first report produced gives averages since the last reboot.   Addi?
       tional  reports  give information on a sampling period of length delay.
       The process and memory reports are instantaneous in either case.

Hieronder volgen enkele voorbeelden in vraag- en antwoordstijl die je een beter idee moeten geven van hoe het vmstat commando werkt:

Q1. Hoe gebruik je vmstat?

Voor basisgebruik voer je gewoon ‘vmstat’ uit zonder opties.

vmstat

In mijn geval leverde het bovenstaande commando bijvoorbeeld de volgende uitvoer op:

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 401160 100252 1307468    0    0     5    17   49   70  0  0 100  0  0

Zoals de eerste rij aangeeft, is de uitvoer verdeeld in zes secties. De man pagina van het gereedschap bevat gedetailleerde informatie over deze waarden. Hier volgt een uittreksel:

Procs
       r: The number of runnable processes (running or waiting for run time).
       b: The number of processes in uninterruptible sleep.

   Memory
       swpd: the amount of virtual memory used.
       free: the amount of idle memory.
       buff: the amount of memory used as buffers.
       cache: the amount of memory used as cache.
       inact: the amount of inactive memory.  (-a option)
       active: the amount of active memory.  (-a option)

   Swap
       si: Amount of memory swapped in from disk (/s).
       so: Amount of memory swapped to disk (/s).

   IO
       bi: Blocks received from a block device (blocks/s).
       bo: Blocks sent to a block device (blocks/s).

   System
       in: The number of interrupts per second, including the clock.
       cs: The number of context switches per second.

   CPU
       These are percentages of total CPU time.
       us: Time spent running non-kernel code.  (user time, including nice time)
       sy: Time spent running kernel code.  (system time)
       id: Time spent idle.  Prior to Linux 2.5.41, this includes IO-wait time.
       wa: Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.
       st: Time stolen from a virtual machine.  Prior to Linux 2.6.11, unknown.

Q2. Hoe kan ik vmstat zijn uitvoer automatisch laten bijwerken?

Standaard produceert vmstat eenmaal uitvoer. Als je echter wilt dat vmstat zijn uitvoer automatisch bijwerkt, dan kun je dat doen door een numerieke waarde op te geven als invoer voor het commando.

Deze numerieke waarde fungeert als vertraging (in seconden) waarna de uitvoer wordt bijgewerkt. Bijvoorbeeld:

vmstat 3

Op deze manier wordt de uitvoer van vmstat elke 3 seconden ververst.

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 410928 100276 1307480    0    0     5    17   49   70  0  0 100  0  0
 0  0      0 410920 100284 1307480    0    0     0   181  108  143  0  0 100  0  0
 0  0      0 410920 100292 1307480    0    0     0     7   92  132  0  0 100  0  0
 0  0      0 410920 100292 1307480    0    0     0     0   87  124  0  0 100  0  0
...
...
...

Q3. Hoe kan vmstat slabinfo weergeven?

Voor slabinfo moet je de -m commandoregeloptie gebruiken. Merk op dat de kernel van je Linux distributie slabinfo moet ondersteunen om deze optie te laten werken. Als er ondersteuning is, dan moet je het commando uitvoeren met sudo rechten.

sudo vmstat -m

In mijn geval is hier bijvoorbeeld een uittreksel van de geproduceerde uitvoer:

Cache                       Num  Total   Size  Pages
ufs_inode_cache               0      0    808     40
qnx4_inode_cache              0      0    680     48
hfsplus_attr_cache            0      0   3840      8
hfsplus_icache                0      0    896     36
hfs_inode_cache               0      0    832     39
minix_inode_cache             0      0    672     48
ntfs_big_inode_cache          0      0    960     34
ntfs_inode_cache              0      0    296     55
jfs_ip                        0      0   1280     25
xfs_dqtrx                     0      0    528     31
xfs_dquot                     0      0    496     33
xfs_buf                       0      0    384     42
xfs_rui_item                  0      0    696     47
xfs_rud_item                  0      0    176     46
xfs_inode                     0      0   1024     32
xfs_efd_item                  0      0    440     37
xfs_buf_item                  0      0    272     30
xfs_trans                     0      0    232     35
xfs_da_state                  0      0    480     34
xfs_btree_cur                 0      0    224     36
...
...
...

Q4. Hoe laat je vmstat samenvattende statistieken van schijfactiviteit rapporteren?

Gebruik daarvoor de -D commandoregel optie.

vmstat -D

Hier is de uitvoer van dit commando op mijn systeem:

           10 disks
            2 partitions
        15066 total reads
         5937 merged reads
      1272794 read sectors
        20063 milli reading
       155026 writes
       103687 merged writes
      4602472 written sectors
       105279 milli writing
            0 inprogress IO
          126 milli spent IO

Q5. Hoe kan vmstat een tijdstempel toevoegen aan elke uitvoerregel?

Om ervoor te zorgen dat het vmstat commando aan elke uitvoerregel een timestamp toevoegt, gebruik je de -t commandoregel:

vmstat -t
$ vmstat 2 -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 UTC
 2  0      0 410116 100432 1308160    0    0     5    17   49   70  0  0 100  0  0 2020-05-08 09:40:05
 0  0      0 410116 100432 1308160    0    0     0    88  100  136  0  0 100  0  0 2020-05-08 09:40:07
 0  0      0 410116 100440 1308160    0    0     0    18   90  139  0  0 100  0  0 2020-05-08 09:40:09
 0  0      0 410116 100440 1308160    0    0     0     0   93  126  0  0 100  0  0 2020-05-08 09:40:11
 0  0      0 410368 100448 1308160    0    0     0    10  107  144  0  0 100  0  0 2020-05-08 09:40:13
 0  0      0 410368 100448 1308160    0    0     0     0   86  122  0  0 100  0  0 2020-05-08 09:40:15
 0  0      0 410368 100448 1308160    0    0     0     0  101  135  0  0 100  0  0 2020-05-08 09:40:17

De gemarkeerde entries tonen de timestamp die in elke regel is opgenomen.

Conclusie

Afhankelijk van het soort werk dat je op de Linux commandoregel doet, kan het vmstat commando erg nuttig zijn. Behalve de hier besproken opties zijn er nog veel meer commandoregelopties die dit gereedschap biedt. Kijk hier voor meer informatie.