vmstat, abreviatura de Virtual Memory Statistics, es una herramienta de línea de comandos en sistemas Linux para supervisar actividades de memoria virtual, procesos y CPU. Proporciona una vista general del rendimiento del sistema, aunque no permite un análisis profundo de procesos individuales.
Conceptos fundamentales de memoria física y virtual
El acceso directo a la memoria física es significativamente más rápido que el acceso a datos en el disco duro. Debido a que la memoria física es limitada, Linux utiliza un sistema de memoria virtual como extensión. Esta memoria virtual se implementa en un área del disco conocida como espacio de intercambio (Swap Space).
Cuando la memoria física disponible es insuficiente, el kernel de Linux puede mover temporalmente bloques de datos poco utilizados hacia el espacio de intercambio. Esto libera memoria física para otras necesidades. Cuando esos datos son nuevamente requeridos, se cargan de vuelta en la memoria física.
La gestión de memoria en Linux se basa en un sistema de paginación. El kernel intercambia automáticamente páginas de memoria que no se usan con frecuencia al espacio de intercambio, manteniendo la información más accedida en la memoria física.
Es importante entender que Linux realiza intercambio de páginas de manera proactiva, incluso cuando hay memoria libre, para optimizar el rendimiento futuro. Los algoritmos internos deciden qué páginas mover basándose en la frecuencia de uso. Un uso excesivo del espacio de intercambio puede indicar falta de memoria física o una posible fuga de memoria en algún proceso.
Principios de la gestión de memoria virtual
En un sistema Linux, la memoria virtual permite a los procesos utilizar más espacio de direcciones que el disponible físicamente. El kernel gestiona esto mediante dos mecanismos principales:
- Paginación (Paging): Mueve páginas de memoria individuales entre la RAM y el disco.
- Intercambio (Swapping): Puede mover un proceso completo entre la memoria y el disco.
Cuando una página solicitada no se encuentra en la memoria física (porque ha sido escrita en disco), ocurre un error de página (Page Fault). El sistema entonces carga la página necesaria. Si la actividad de paginación (Page-Out) se vuelve excesiva, puede provocar un estado conocido como thrashing, donde el sistema dedica más tiempo a gestionar memoria que a ejecutar tareas útiles, degradando severamente el rendimiento.
Uso básico e interpretación de la salida
Para obtener una muestra del rendimiento del sistema, se puede ejecutar:
vmstat [intervalo] [cuenta]
Por ejemplo, vmstat 2 5 tomará 5 muestras a intervalos de 2 segundos.
La salida se organiza en varias secciones:
Sección de Procesos (Procs)
r: Número de procesos en la cola de ejecución listos para usar la CPU. Valores sostenidos superiores al número de núcleos de CPU indican un cuello de botella.b: Número de procesos bloqueados, típicamente esperando una operación de E/S.
Sección de Memoria (Memory)
swpd: Cantidad de memoria virtual en uso. Un valor mayor que cero sugiere que la memoria física es insuficiente.free: Memoria física inmediatamente disponible.buff: Memoria utilizada como búferes por el kernel.cache: Memoria utilizada como caché de páginas de archivos para acelerar el acceso al disco.
Sección de Intercambio (Swap)
si: Cantidad de memoria (en kB/s) movida desde el disco de intercambio hacia la memoria física.so: Cantidad de memoria (en kB/s) movida desde la memoria física hacia el disco de intercambio. Valores altos indican posible falta de memoria.
Sección de E/S (IO)
bi: Bloques recibidos por segundo desde un dispositivo de bloque (ej. disco). Refleja actividad de lectura.bo: Bloques enviados por segundo hacia un dispositivo de bloque. Refleja actividad de escritura.
Sección del Sistema (System)
in: Número de interrupciones por segundo.cs: Número de cambios de contexto por segundo. Un número muy alto puede indicar una sobrecarga por cambio entre hilos o procesos.
Sección de CPU (porcentaje)
us: Tiempo gastado ejecutando código en modo usuario.sy: Tiempo gastado ejecutando código en modo kernel (llamadas al sistema).id: Tiempo de inactividad de la CPU.wa: Tiempo que la CPU pasó esperando completar una operación de E/S.
Opciones avanzadas de vmstat
El comando ofrece varias banderas para obtener información específica:
Mostrar memoria activa e inactiva
vmstat -a 1 3
La salida añade columnas inact (memoria inactiva) y active (memoria activa).
Mostrar estadísticas de disco
vmstat -d
Presenta un resumen de las operaciones de lectura y escritura para todos los discos.
Mostrar estadísticas para una partición específica
vmstat -p /dev/sda1
Proporciona métricas detalladas de lecturas y escrituras para la partición /dev/sda1.
Mostrar información del slab
vmstat -m
Lista las cachés de objetos del kernel (slab), que son estructuras de datos pequeñas y frecuentemente reutilizadas.
Mostrar número total de procesos creados
vmstat -f
Indica cuántos procesos (tareas) han sido creados desde el inicio del sistema, obtenido del archivo /proc/stat.
Mostrar un resumen de estadísticas de memoria
vmstat -s
Ofrece un desglose detallado de la memoria del sistema, incluyendo totales de RAM, espacio de intercambio, y contadores de actividad. Esta información se compila a partir de /proc/meminfo y /proc/vmstat.