El comando vmstat en Linux: estadísticas de memoria y CPU

Introducción

El comando vmstat (virtual memory statistics) es una herramienta esencial para administradores de sistemas que necesitan obtener una visión rápida y continua del rendimiento de un equipo Linux. Proporciona información sobre procesos, memoria, paginación, bloqueos de I/O y actividad de la CPU, todo en una sola línea de salida que se actualiza en intervalos definidos por el usuario.

Sintaxis básica

La forma más simple de ejecutar vmstat es:

vmstat [retardo] [contador]

Donde retardo es el número de segundos entre cada muestra y contador indica cuántas muestras se mostrarán antes de terminar. Si se omite el contador, el comando se ejecuta indefinidamente hasta que se interrumpe con Ctrl+C.

Descripción de las columnas

La salida de vmstat se divide en varios bloques. Cada bloque contiene columnas que representan métricas específicas:

  • procs: r (procesos en espera de ejecución) y b (procesos bloqueados en I/O no interrumpible).
  • memory: swpd (memoria swap usada), free (memoria libre), buff (memoria usada como buffers) y cache (memoria usada como caché).
  • swap: si (swap in: bloques leídos desde swap por segundo) y so (swap out: bloques escritos a swap por segundo).
  • io: bi (bloques recibidos desde un dispositivo de bloque por segundo) y bo (bloques enviados a un dispositivo de bloque por segundo).
  • system: in (interrupciones por segundo) y cs (cambios de contexto por segundo).
  • cpu: Porcentajes de tiempo de CPU usados en us (usuario), sy (sistema), id (inactivo), wa (espera de I/O) y st (tiempo robado por hipervisor).

Ejemplos de uso práctico

Para observar la actividad del sistema cada 2 segundos y mostrar 5 muestras:

vmstat 2 5

Esto producirá una tabla donde cada fila corresponde a un intervalo de 2 segundos, permitiendo detectar picos de consumo o patrones de comportamiento.

Si se quiere enfocarse únicamente en la memoria y la paginación, se puede combinar vmstat con awk para extraer columnas específicas:

vmstat 1 | awk '{print $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20}'

En este ejemplo se imprimen las columnas de memoria, swap, I/O y CPU en cada segundo.

Opciones útiles

  • -a: muestra memoria activa e inactiva en lugar de buffers y caché.
  • -f: muestra el número de procesos creados desde el arranque del sistema.
  • -m: muestra información de uso de memoria por el allocator del kernel (slab).
  • -s: muestra una tabla de contadores de eventos diversos (interrupciones, cambios de contexto, etc.).
  • -d: muestra estadísticas de I/O de disco.
  • -p : muestra estadísticas detalladas de una partición o disco específico.

Combinando vmstat con otras herramientas

Para un análisis más profundo, vmstat se usa frecuentemente junto con top, <iostat o mpstat. Por ejemplo, se puede crear un script que registre simultáneamente el uso de CPU y la actividad de disco:

#!/bin/bash
while true; do
    echo "$(date) ---- CPU y MEM ----"
    vmstat 1 2 | tail -1
    echo "$(date) ---- I/O de disco ----"
    iostat -x 1 2 | tail -5
    sleep 5
done

Este tipo de combinaciones permite correlacionar picos de uso de CPU con aumentos en la espera de I/O o en la paginación, facilitando la identificación de cuellos de botella.

Buenas prácticas y consejos

  • Ejecutar vmstat con un retardo demasiado bajo (por ejemplo, 0.1 segundos) puede generar una sobrecarga innecesaria; valores entre 1 y 5 segundos son adecuados para la mayoría de los escenarios de monitorización.
  • Guardar la salida en un archivo de log facilita el análisis posterior: vmstat 5 > /var/log/vmstat_$(date +%F).log.
  • En entornos virtualizados, prestar atención a la columna st (tiempo robado) ayuda a detectar cuando el hipervisor está limitando los recursos de la máquina invitada.
  • Utilizar la opción -a en sistemas modernos con mucha memoria puede ofrecer una visión más clara de la memoria realmente disponible para aplicaciones.

Conclusión

El comando vmstat es una herramienta ligera pero poderosa que brinda una instantánea completa del estado de la memoria, la CPU y el subsistema de I/O en sistemas Linux. Su simplicidad de uso, combinada con la capacidad de personalizar la salida mediante opciones y scripts, lo convierte en un aliado indispensable para cualquier administrador que busque mantener el rendimiento y la estabilidad de sus servidores.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .