Cómo usar el comando vmstat en Linux

Su computadora Linux o macOS está usando memoria virtual. Descubra cómo está afectando el uso de su sistema de la memoria física, la CPU y los recursos del disco duro.

¿Qué es la memoria virtual?

Su computadora está equipada con una cantidad finita de memoria física llamada memoria de acceso aleatorio (RAM). Esta RAM debe ser administrada por el kernel y compartida entre el sistema operativo y cualquier aplicación que se esté ejecutando. Si estas demandas combinadas exigen más memoria de la que está instalada físicamente en su computadora, ¿qué puede hacer el kernel?

Los sistemas operativos Linux y similares a Unix, como macOS, pueden usar espacio en su disco duro para ayudarlos a administrar las demandas de memoria. Se puede usar un área reservada de espacio en el disco duro llamada «espacio de intercambio» como si fuera una extensión de la RAM. Esta es la memoria virtual.

El kernel de Linux puede escribir el contenido de un bloque de memoria en el espacio de intercambio y liberar esa región de RAM para que la use otro proceso. La memoria intercambiada, también llamada «paginada», se puede recuperar del espacio de intercambio y restaurar a la RAM cuando sea necesario.

Por supuesto, la velocidad de acceso a la memoria paginada es más lenta que la de la memoria almacenada en la RAM. Y esa no es la única compensación. Si bien la memoria virtual proporciona una forma para que Linux administre sus demandas de memoria, el uso de la memoria virtual aumenta las cargas en otras partes de la computadora.

Su disco duro debe realizar más lecturas y escrituras. El núcleo, y por lo tanto, la CPU, debe trabajar más, ya que intercambia memoria, ingresa y mantiene todas las placas girando para satisfacer las necesidades de memoria de los diferentes procesos.

Linux proporciona una forma de supervisar toda esta actividad en la forma del comando vmstat, que informa sobre estadísticas de memoria virtual.

El comando vmstat

Si escribe vmstat como un comando sin parámetros, le mostrará un conjunto de valores. Estos valores son los promedios de cada una de las estadísticas desde que se reinició su computadora por última vez. Estas cifras no son una instantánea de los valores «ahora mismo».

vmstat

vmstat en una ventana de terminal

Se muestra una pequeña tabla de valores.

Salida de vmstat en una ventana de terminal

Hay columnas tituladas Procs, Memory, Swap, IO, System y CPU. La última columna (la columna más a la derecha) contiene los datos relacionados con la CPU.

vmstat genera columnas de la derecha en una ventana de terminal

A continuación se muestra una lista de los elementos de datos de cada columna.

Proc

r: el número de procesos ejecutables. Estos son procesos que se han iniciado y se están ejecutando o están esperando su próxima ráfaga de ciclos de CPU divididos en el tiempo.
b: El número de procesos en suspensión ininterrumpida. El proceso no está inactivo, está realizando una llamada al sistema de bloqueo y no se puede interrumpir hasta que haya completado su acción actual. Normalmente, el proceso es un controlador de dispositivo que espera a que se libere algún recurso. Cualquier interrupción en cola para ese proceso se maneja cuando el proceso reanuda su actividad habitual.

  Cómo cifrar particiones del disco duro en Linux

Memoria

swpd: la cantidad de memoria virtual utilizada. En otras palabras, cuánta memoria se ha intercambiado.
free: la cantidad de memoria inactiva (actualmente sin usar).
buff: la cantidad de memoria utilizada como búfer.
caché: la cantidad de memoria utilizada como caché.

Intercambiar

si: Cantidad de memoria virtual intercambiada desde el espacio de intercambio.
entonces: Cantidad de memoria virtual intercambiada para intercambiar espacio.

IO

bi: Bloques recibidos de un dispositivo de bloque. El número de bloques de datos utilizados para intercambiar la memoria virtual de nuevo a la RAM.
bo: Bloques enviados a un dispositivo de bloque. El número de bloques de datos utilizados para intercambiar la memoria virtual de la RAM al espacio de intercambio.

Sistema

in: el número de interrupciones por segundo, incluido el reloj.
cs: el número de cambios de contexto por segundo. Un cambio de contexto es cuando el kernel cambia del procesamiento en modo sistema al procesamiento en modo usuario.

UPC

Estos valores son todos porcentajes del tiempo total de CPU.

us: tiempo dedicado a ejecutar código que no es del kernel. Es decir, cuánto tiempo se dedica al procesamiento del tiempo del usuario y al procesamiento del tiempo agradable.
sy: tiempo dedicado a ejecutar el código del kernel.
id: tiempo de inactividad.
wa: tiempo dedicado a la espera de entrada o salida.
st: tiempo robado de una máquina virtual. Este es el tiempo que una máquina virtual tiene que esperar a que el hipervisor termine de dar servicio a otras máquinas virtuales antes de que pueda regresar y atender esta máquina virtual.

Usando un intervalo de tiempo

Podemos hacer que vmstat proporcione actualizaciones periódicas de estas cifras utilizando un valor de retraso. El valor de retraso se proporciona en segundos. Para tener las estadísticas actualizadas cada cinco segundos, usaríamos el siguiente comando:

vmstat 5

vmstat 5 en una ventana de terminal

Cada cinco segundos, vmstat agregará otra línea de datos a la tabla. Deberá presionar Ctrl + C para detener esto.

salida de vmstat 5 en una ventana de terminal

Usando un valor de conteo

El uso de un valor de retardo demasiado bajo ejercerá una presión adicional sobre su sistema. Si necesita tener actualizaciones rápidas para tratar de diagnosticar un problema, se recomienda que utilice un valor de recuento y un valor de retraso.

El valor de recuento le dice a vmstat cuántas actualizaciones debe realizar antes de salir y lo regresa al símbolo del sistema. Si no proporciona un valor de recuento, vmstat se ejecutará hasta que Ctrl + C lo detenga.

Para que vmstat proporcione una actualización cada cinco segundos, pero solo para cuatro actualizaciones, use el siguiente comando:

vmstat 5 4

vmstat 5 4 en una ventana de terminal

Después de cuatro actualizaciones, vmstat se detiene por sí solo.

salida de vmstat 5 4 en una ventana de terminal

Cambio de unidades

Puede elegir que la memoria y las estadísticas de intercambio se muestren en kilobytes o megabytes usando la opción -S (carácter de unidad). Debe ir seguido de uno de k, K, m o M. Estos representan:

  Cómo configurar el lector de feeds RSS NewsFlash en Linux

k: 1000 bytes
K: 1024 bytes
m: 1000000 bytes
M: 1048576 bytes

Para que las estadísticas se actualicen cada 10 segundos con la memoria y las estadísticas de intercambio mostradas en megabytes, use el siguiente comando:

vmstat 10 -S M

vmstat 10 -SM en una ventana de terminal

Las estadísticas de memoria e intercambio ahora se muestran en megabytes. Tenga en cuenta que la opción -S no afecta las estadísticas del bloque de E / S. Estos siempre se muestran en bloques.

salida de vmstat 10 -SM en una ventana de terminal

Memoria activa e inactiva

Si usa la opción -a (activa), las columnas de memoria caché y de memoria caché se reemplazan por las columnas «inact» y «activa». Como sugerirían, estos muestran la cantidad de memoria inactiva y activa.

Para ver estas dos columnas en lugar de las columnas de mejora y caché, incluya la opción -a, como se muestra:

vmstat 5 -a -S M

vmstat 5 -a -SM en una ventana de terminal

Las columnas inactivas y activas se ven afectadas por la opción -S (carácter de unidad).

salida de vmstat 5 -a -SM en una ventana de terminal

tenedores

El modificador -f muestra el número de bifurcaciones que se han producido desde que se inició la computadora.

En otras palabras, esto muestra la cantidad de tareas que se han iniciado (y, para la mayoría de ellas, cerradas nuevamente) desde que se inició el sistema. Cada proceso iniciado desde la línea de comando aumentaría esta cifra. Cada vez que una tarea o proceso genera o clona una nueva tarea, esta cifra aumentará.

vmstat -f

vmstat -f en una ventana de terminal

La pantalla de horquillas no se actualiza.

Visualización de Slabinfo

El kernel tiene su propia gestión de memoria de la que preocuparse, así como la gestión de memoria para el sistema operativo y todas las aplicaciones.

Como puede imaginar, el kernel asigna y desasigna memoria una y otra vez para los diferentes tipos de objetos de datos que debe manejar. Para que esto sea lo más eficiente posible, utiliza un sistema llamado losas. Esta es una forma de almacenamiento en caché.

La memoria asignada, utilizada y que ya no es necesaria para un tipo específico de objeto de datos del kernel se puede reutilizar para otro objeto de datos del mismo tipo sin que se desasigne y reasigne la memoria. Piense en las losas como segmentos de RAM preasignados, hechos a medida, para las propias necesidades del kernel.

Para ver las estadísticas de las losas, use la opción -m (losas). Deberá usar sudo y se le pedirá su contraseña. Como la salida puede ser bastante larga, la estamos canalizando menos.

sudo vmstat -m | less

sudo vmstat -m |  menos en una ventana de terminal

La salida tiene cinco columnas. Estos son:

Caché: Nombre de la caché.
num: el número de objetos actualmente activos en esta caché.
total: el número total de objetos disponibles en esta caché.
tamaño: el tamaño de cada objeto en la caché.
páginas: el número total de páginas de memoria que tienen (al menos) un objeto actualmente asociado con esta caché.

salida de sudo vmstat -m |  menos en una ventana de terminal

Presione q para dejar menos.

Visualización de contadores de eventos y estadísticas de memoria

Para mostrar una página de contadores de eventos y estadísticas de memoria, use la opción -s (estadísticas). Tenga en cuenta que es una «s» minúscula.

vmstat -s

vmstat -s en una ventana de terminal

Aunque las estadísticas que se informan son en gran medida las mismas que la información que constituye la salida de vmstat predeterminada, algunas de ellas se dividen con más detalle.

  Revisión del mejor antivirus para Linux en 2019

Por ejemplo, la salida predeterminada combina el tiempo de CPU del usuario agradable y no agradable en la columna «nosotros». La pantalla -s (estadísticas) enumera estas estadísticas por separado.

salida de vmstat -s en la ventana terminal

Visualización de estadísticas de disco

Puede obtener una lista similar de estadísticas de disco utilizando la opción -d (disco).

vmstat -d | less

vmstat -d |  menos en una ventana de terminal

Para cada disco, se muestran tres columnas, estas son Lecturas, Escrituras e IO.

salida de vmstat -d |  menos en una ventana de terminal

IO es la columna de la derecha. Tenga en cuenta que la columna seg en IO se mide en segundos, pero las estadísticas basadas en el tiempo en las columnas de lectura y escritura se miden en milisegundos.

salida vmstat -d |  menos en una ventana de terminal

Esto es lo que significan las columnas:

Lee

total: el recuento total de lecturas de disco.
fusionado: el recuento total de lecturas agrupadas.
sectores: el recuento total de sectores que se han leído.
ms: Recuento total de tiempo en milisegundos que se utilizó para leer datos del disco.

escribe

total: el recuento total de escrituras en disco.
fusionado: el recuento total de escrituras agrupadas.
sectores: el recuento total de sectores en los que se escribe.
ms = Recuento total de tiempo en milisegundos que se utilizó para escribir datos en el disco.

IO

cur: número de lecturas o escrituras de disco actuales.
seg: tiempo empleado en segundos para cualquier lectura o escritura en curso.

Visualización de estadísticas de disco de resumen

Para ver una visualización rápida de las estadísticas resumidas de la actividad de su disco, use la opción -D (suma de discos). Tenga en cuenta la «D» mayúscula

vmstat -D

vmstat -D en una ventana de terminal

La cantidad de discos puede parecer anormalmente alta. La computadora utilizada para investigar este artículo ejecuta Ubuntu. Con Ubuntu, cada vez que instala una aplicación desde un Snap, se crea un pseudo-sistema de archivos squashfs que se adjunta a un dispositivo / dev / loop.

Es molesto que muchas de las utilidades y comandos de Linux cuenten estas entradas de dispositivo como dispositivos de disco duro.

salida de vmstat -D en una ventana de terminal

Visualización de estadísticas de partición

Para ver las estadísticas relacionadas con una partición específica, use la opción -p (partición) y proporcione el identificador de la partición como parámetro de línea de comando.

Aquí vamos a ver la partición sda1. El dígito uno indica que esta es la primera partición en el dispositivo sda, que es el disco duro principal de esta computadora.

vmstat -p sda1

vmstat -p en una ventana de terminal

La información devuelta muestra el recuento total de lecturas y escrituras en disco desde y hacia esa partición, y el número de sectores incluidos en las acciones de lectura y escritura en disco.

salida de vmstat -p sda1 en una ventana de terminal

Un vistazo bajo el capó

Siempre es bueno saber cómo levantar el capó y ver qué pasa debajo. A veces, tratará de resolver un problema, a veces no le interesará porque desea saber cómo funciona su computadora.

vmstat puede proporcionarle una gran cantidad de información útil. Ahora sabe cómo acceder a él y lo que significa. Y estar advertido está prevenido: cuando necesite arremangarse y hacer algunos diagnósticos, sabrá que tiene vmstat de su lado.