Tutorial del comando Linux vmstat para principiantes (5 ejemplos)

Si buscas una utilidad de línea de comandos que puedas utilizar para acceder a información sobre procesos, actividad de la CPU, memoria y mucho más, te alegrará saber que vmstat lo hace por ti.

En este artículo, hablaremos de los fundamentos de esta herramienta utilizando algunos ejemplos fáciles de entender. Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos de este artículo han sido probados en una máquina Ubuntu 20.04 LTS, pero también funcionará en CentOS y Debian.

Comando vmstat de Linux

El comando vmstat en Linux informa de las estadísticas de la memoria virtual. A continuación se muestra su sintaxis:

vmstat [options] [delay [count]]

Y así es como lo explica la página man de la herramienta:

       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.

A continuación se presentan algunos ejemplos al estilo de las preguntas y respuestas que deberían darte una mejor idea de cómo funciona el comando vmstat:

Q1. ¿Cómo se utiliza vmstat?

Para un uso básico, basta con ejecutar ‘vmstat’ sin ninguna opción.

vmstat

Por ejemplo, en mi caso, el comando anterior produjo la siguiente salida:

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

Como indica la primera fila, la salida se divide en seis secciones. La página man de la herramienta contiene información detallada sobre estos valores. Aquí tienes un extracto:

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. ¿Cómo hacer que vmstat actualice automáticamente su salida?

Por defecto, vmstat produce la salida una vez. Sin embargo, si quieres que vmstat actualice automáticamente su salida, puedes hacerlo especificando un valor numérico como entrada al comando.

Este valor numérico actúa como retraso (en segundos) tras el cual se actualiza la salida. Por ejemplo:

vmstat 3

De esta forma, la salida de vmstat se actualizará cada 3 segundos.

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. ¿Cómo hacer que vmstat muestre slabinfo?

Para que vmstat muestre slabinfo, tienes que utilizar la opción de línea de comandos -m. Ten en cuenta que el núcleo de tu distribución de Linux debe soportar slabinfo para que esta opción funcione. Si lo soporta, tienes que ejecutar el comando con permisos sudo.

sudo vmstat -m

Por ejemplo, en mi caso, he aquí un extracto de la salida producida:

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. ¿Cómo hacer que vmstat informe de las estadísticas de resumen de la actividad del disco?

Utiliza la opción de línea de comandos -D para ello.

vmstat -D

Esta es la salida que produjo este comando en mi sistema:

           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. ¿Cómo hacer que vmstat añada una marca de tiempo a cada línea de salida?

Para que el comando vmstat añada la marca de tiempo a cada línea de salida, utiliza la línea de comandos -t:

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

Las entradas resaltadas muestran la marca de tiempo incluida en cada línea.

Conclusión

Dependiendo del tipo de trabajo que realices en la línea de comandos de Linux, el comando vmstat puede resultar realmente útil. Aparte de las opciones comentadas aquí, hay muchas otras opciones de línea de comandos que ofrece esta herramienta. Dirígete aquí para saber más.

También te podría gustar...