Si está buscando una utilidad de línea de comandos que pueda usar para acceder a información sobre procesos, actividad de la CPU, memoria y más, le alegrará saber que vmstat hace esto por ti.
En este artículo, discutiremos los conceptos básicos 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 se probaron en una máquina con Ubuntu 20.04 LTS, pero también funcionará en CentOS y Debian.
Comando Linux vmstat
El comando vmstat en Linux informa estadísticas de memoria virtual. La siguiente es su sintaxis:
vmstat [options] [delay [count]]
Y así es como lo explica la página de manual 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.
Los siguientes son algunos ejemplos de preguntas y respuestas que deberían darle una mejor idea de cómo funciona el comando vmstat:
P1. ¿Cómo usar vmstat?
Para uso básico, simplemente ejecute 'vmstat' sin ninguna opción.
vmstat
Por ejemplo, en mi caso, el comando anterior produjo el siguiente resultado:
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 del manual de la herramienta contiene información detallada sobre estos valores. Aquí está el 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.
P2. ¿Cómo hacer que vmstat actualice automáticamente su salida?
De forma predeterminada, vmstat produce una salida una vez. Sin embargo, si desea que vmstat actualice automáticamente su salida, puede hacerlo especificando un valor numérico como entrada para el comando.
Este valor numérico actúa como retraso (en segundos) después del 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
...
...
...
P3. ¿Cómo hacer que vmstat muestre slabinfo?
Para slabinfo, debe usar la opción de línea de comando -m. Tenga en cuenta que el kernel de su distribución de Linux debe ser compatible con slabinfo para que esta opción funcione. Si hay soporte, debe ejecutar el comando con permisos sudo.
sudo vmstat -m
Por ejemplo, en mi caso, aquí hay 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
...
...
...
P4. ¿Cómo hacer que vmstat informe las estadísticas de resumen de la actividad del disco?
Utilice la opción de línea de comandos -D para ello.
vmstat -D
Aquí está el resultado 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
P5. ¿Cómo hacer que vmstat agregue la marca de tiempo a cada línea de salida?
Para asegurarse de que el comando vmstat agregue una marca de tiempo a cada línea de salida, use la línea de comando -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
Según el tipo de trabajo que realice en la línea de comandos de Linux, el comando vmstat puede resultar realmente útil. Además de las opciones discutidas aquí, hay muchas otras opciones de línea de comandos que ofrece esta herramienta. Dirígete aquí para obtener más información.