Monitoreo de E/S de disco con iostat y dstat | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Monitoreo de E/S de disco con iostat y dstat

Introducción

Monitorear la entrada-salida del disco es una de las tareas clave al operar servidores en una infraestructura de hosting. El subsistema de disco afecta directamente el rendimiento de los servicios web, bases de datos, máquinas virtuales, contenedores y tareas en segundo plano. Incluso con suficiente RAM y recursos de CPU libres, un disco sobrecargado o lento puede convertirse en el cuello de botella de todo el sistema.

Este manual está destinado a administradores de sistemas, ingenieros DevOps y propietarios de servidores. Cubre las utilidades iostat y dstat, los principios de su operación, la interpretación de métricas y un enfoque práctico para encontrar cuellos de botella de E/S de disco en un entorno de hosting.

Información general y principios de operación

E/S de disco en una infraestructura de servidor

La entrada-salida de disco incluye operaciones de lectura y escritura de datos en dispositivos de bloque. En escenarios de hosting del mundo real, la carga en el subsistema de disco es generada más a menudo por:

  • bases de datos (MySQL, MariaDB, PostgreSQL);
  • aplicaciones web con contenido dinámico;
  • servicios de correo;
  • respaldo y sincronización de datos;
  • registro de logs;
  • archivos de intercambio y temporales;
  • scripts de usuario y trabajos cron.

Los cuellos de botella pueden ocurrir debido a dispositivos de almacenamiento lentos, alta contención entre procesos, planificadores de E/S no óptimos, operación incorrecta de caché o características de virtualización.

Propósito de iostat y dstat

iostat es una utilidad del paquete sysstat diseñada para recopilar estadísticas detalladas sobre la carga de CPU y dispositivos de disco. La tarea principal de iostat es mostrar cuán intensivamente se está utilizando un disco específico, si hay una cola de solicitudes y cuál es el tiempo de espera promedio para las operaciones.

dstat es una herramienta de monitoreo versátil que muestra estadísticas en tiempo real a través de varios subsistemas a la vez: CPU, memoria, disco, red, procesos. Permite correlacionar la actividad del disco con la carga general del servidor y es conveniente para diagnósticos rápidos.

Estas utilidades se complementan entre sí: iostat proporciona una imagen precisa a nivel de dispositivo, mientras que dstat proporciona el contexto de todo el sistema.

Requisitos previos y requisitos

Antes de comenzar el análisis, se deben cumplir las siguientes condiciones:

  • Sistema operativo Linux (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
  • Acceso SSH al servidor.
  • Privilegios de root o la capacidad de ejecutar comandos a través de sudo.

Verificación de la versión del SO:

cat /etc/os-release

Instalación de los paquetes necesarios.

Debian / Ubuntu:

sudo apt update

sudo apt install sysstat dstat

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install sysstat dstat

sudo dnf install sysstat dstat

Verificación del funcionamiento de sysstat:

systemctl status sysstat

Si el servicio está activo, se mostrará la información relevante:

root@server:~# systemctl status sysstat ● sysstat.service - Resets System Activity Logs Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled) Active: active (exited) since Tue 2025-12-23 10:35:35 UTC; 16min ago Docs: man:sa1(8) man:sadc(8) man:sar(1) Main PID: 731 (code=exited, status=0/SUCCESS) CPU: 7ms

Revisión y análisis paso a paso

Análisis básico del disco usando iostat

La utilidad iostat se utiliza para evaluar la carga del subsistema de CPU y disco, así como para identificar retrasos y colas de E/S.

Sintaxis:

sudo iostat [options] [interval] [count]

Parámetros más comúnmente usados:

  • -x — estadísticas extendidas;
  • -d — datos solo de disco;
  • -k — salida en kilobytes;
  • -p — estadísticas para particiones o un dispositivo específico.

Ejemplo básico:

sudo iostat -x

Análisis dinámico:

sudo iostat -xk 5 3

El intervalo y el número de muestras permiten rastrear cambios de carga a lo largo del tiempo, en lugar del estado promedio desde el arranque del sistema.

Ejemplo de salida de iostat:

Ejemplo de salida de iostat

Métricas clave de CPU:

  • %iowait — el porcentaje de tiempo que la CPU está inactiva mientras espera operaciones de E/S. Un aumento en esta métrica indica el impacto del disco en el rendimiento general.
  • %steal — relevante para servidores virtuales y muestra el tiempo de CPU robado.

Métricas clave de disco:

  • %util — el porcentaje de tiempo que el disco estuvo ocupado. Valores que consistentemente superan el 80–90% indican saturación del dispositivo.
  • r_await — el tiempo promedio (ms) para completar operaciones de lectura (incluyendo tiempo en cola).
  • w_await — el tiempo promedio (ms) para completar operaciones de escritura (incluyendo tiempo en cola).
  • aqu-sz — (tamaño promedio de cola) la longitud promedio de la cola de solicitudes para el disco. Un valor > 1 ya indica la formación de una cola. Un valor > 2–4 para HDD / > 1–2 para SSD es una señal de que el disco no está manteniendo el ritmo con la carga.

La diferencia entre await y svctm muestra si el retraso es causado por la cola, en lugar de la velocidad física del disco.
Si await solo excede ligeramente a svctm (diferencia < 20–30%), los retrasos son causados principalmente por el propio disco (lectura/escritura física lenta).
Si await es significativamente mayor que svctm (diferencia > 50–100%), el principal retraso es causado por la cola de solicitudes (aqu-sz será alta), indicando sobrecarga del disco por muchas solicitudes paralelas.

En versiones modernas de iostat (como en el ejemplo), svctm no se muestra porque su cálculo no es confiable. Para el análisis, se utiliza la combinación de await + aqu-sz: await alto con aqu-sz bajo (~0) indica un disco lento; await alto con aqu-sz alto (>1) indica que el disco está sobrecargado con solicitudes.

Análisis de la imagen general con dstat

dstat se utiliza para la observación del sistema en tiempo real y para correlacionar la carga del disco con otros recursos.

Ejemplos de comandos:

dstat -d

dstat --disk-util

dstat -rd --disk-util

dstat -D vda,sda

Ejemplo de ejecución con un intervalo:

dstat -rd --disk-util 1 5

Al analizar, preste atención a:

  • aumento en iowait en CPU;
  • picos de lectura o escritura;
  • actividad simultánea de red y disco (respaldos, sincronización).

Ejemplo de salida de dstat:

dstat -rd --disk-util 1 5 --io/total- -dsk/total- vda- read write| read write|util 0 4.00 | 0 76k|0.50 0 29.5 | 0 240k|0.20 0 1.00 | 0 4096B| 0 0 0 | 0 0 | 0 0 1.00 | 0 32k| 0

Comparación de dstat e iostat:

Criterios iostat dstat
Precisión de datos Alta Alta
Modo en tiempo real Limitado Excelente
Datos históricos Sí (sar) No
Salida en color No
Extensibilidad No Plugins
Exportación CSV No
Carga de CPU Baja Media

dstat es particularmente útil para picos de carga a corto plazo que no siempre son visibles en iostat.

Identificación de cuellos de botella de E/S de disco

Los siguientes comandos se utilizan para diagnósticos rápidos:

sudo iostat -mx 2

sudo iostat -p /dev/vda 2 5

sar -d 1 5

Signos típicos de un problema:

  • %util por encima del 80% durante un período prolongado;
  • await por encima de 20–30 ms para SSD o por encima de 50–100 ms para HDD;
  • aqu-sz mayor que 2–3, indicando acumulación de cola.

Info

En el ejemplo, se utiliza el disco /dev/vda — este es un disco virtual (VirtIO) en un servidor virtual. En servidores físicos y en otros entornos, los discos pueden tener nombres diferentes.

  • /dev/sdX (por ejemplo, /dev/sda) — discos SATA/SAS/USB regulares
  • /dev/nvmeXnY (por ejemplo, /dev/nvme0n1) — unidades NVMe
  • /dev/vdX — discos virtuales

Identificación de procesos que causan alta carga de E/S de disco

Después de establecer la presencia de sobrecarga del subsistema de disco usando iostat y dstat, el siguiente paso es identificar los procesos específicos que inician operaciones intensivas de lectura o escritura. El análisis a nivel de dispositivo sin identificar la fuente de carga no permite tomar acciones correctivas adecuadas.

Usando iotop

La herramienta principal para encontrar procesos que están utilizando activamente el disco es la utilidad iotop.

sudo iotop -ao

Parámetros del comando:

  • -a — muestra estadísticas acumulativas desde que el proceso comenzó, lo que ayuda a identificar tareas en segundo plano con E/S a largo plazo;
  • -o — muestra solo aquellos procesos que actualmente están realizando operaciones de E/S.

Ejemplo de salida:

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 11056 be/4 mysql 0.00 B 3.44 M 0.00 % 0.76 % mysqld 2580 be/4 rsync 0.00 B 23.48 M 0.00 % 1.17 % rsync

En la salida de iotop, se debe prestar especial atención a los campos DISK READ, DISK WRITE y al porcentaje de tiempo de I/O. Típicamente, las fuentes de carga son procesos de bases de datos, procesos de respaldo, procesos de sincronización de archivos o scripts de usuario.

Usando pidstat para análisis de E/S por proceso

Para un análisis más formalizado y repetible, se puede usar pidstat, que es parte del paquete sysstat.

pidstat -d 1

Este comando muestra estadísticas de E/S de disco para cada proceso en intervalos de un segundo. Esto es conveniente para identificar picos de actividad a corto plazo y correlacionarlos con otras métricas del sistema.

pidstat es particularmente útil en situaciones donde la carga aparece periódicamente y puede no siempre ser capturada por iotop.

Usando lsof para análisis de actividad de archivos

En casos donde es necesario entender con qué archivos o directorios específicos está trabajando un proceso, se utiliza la utilidad lsof.

lsof +D /path

Dónde /path es un directorio específico dentro del cual se necesitan identificar archivos y procesos activos. Por ejemplo, este podría ser un directorio de base de datos, un directorio de respaldo o un área de archivos temporales.

El comando permite determinar qué procesos están actualmente manteniendo descriptores de archivos y realizando operaciones dentro de la ruta especificada, lo cual es especialmente útil al analizar la carga de aplicaciones.

Análisis del contexto de carga

Identificar un proceso con alta actividad de disco no es el objetivo final. El administrador necesita evaluar el contexto de su operación:

  • ¿es la carga esperada para este servicio?
  • ¿el proceso se está ejecutando en un momento apropiado (por ejemplo, respaldos durante horas pico)?
  • ¿se puede cambiar el horario o los parámetros operativos?
  • ¿es permisible reducir la prioridad de E/S?

Este enfoque permite distinguir la carga normal de la carga problemática y elegir el método de optimización correcto.

Verificación de la corrección del análisis

La corrección del análisis realizado se confirma si:

  • los picos en %util, await o aqu-sz en iostat coinciden en el tiempo con la actividad del proceso en iotop o pidstat;
  • un aumento en iowait en dstat coincide con operaciones de disco, y no con carga de CPU;
  • mediciones repetidas muestran un patrón de carga reproducible.

Para la acumulación de datos y análisis posterior, se recomienda usar el registro:

sar -d 1 100 > io.log

Esto permite registrar el comportamiento del subsistema de disco durante un período especificado y usar los datos al investigar incidentes.

Errores típicos y características operativas

En la práctica de operar servidores de hosting, los siguientes problemas son los más comunes:

  • ejecución de respaldos y sincronización de datos durante horas pico;
  • uso intensivo de swap cuando hay insuficiente RAM;
  • un planificador de E/S inadecuado para el tipo de unidad;
  • falta de priorización para tareas en segundo plano.

Para reducir el impacto de los procesos en segundo plano en el rendimiento, se recomienda usar la utilidad ionice para gestionar la prioridad de E/S de un proceso, lo que permite disminuir el impacto de las tareas en segundo plano en la capacidad de respuesta del sistema.

Ejemplo de uso:

ionice -c3 rsync /source /destination

Prioridades clave:

  • -c1 (tiempo real) — la prioridad más alta. Usado para tareas críticas de latencia. Puede bloquear completamente otros procesos.
  • -c2 (mejor esfuerzo) — el valor predeterminado para la mayoría de los procesos. Permite el ajuste del nivel de prioridad (de 0 (alto) a 7 (bajo)).
  • -c3 (inactivo) — en segundo plano. El proceso solo obtendrá acceso al disco cuando ningún otro proceso lo esté utilizando. Seguro y recomendado para operaciones en segundo plano (respaldos, sincronización de datos).

En este ejemplo, el proceso rsync se ejecuta con la prioridad de E/S más baja, minimizando su impacto en las operaciones principales del sistema. Usar ionice permite minimizar el impacto de los procesos en segundo plano sin necesidad de desactivarlos completamente.

Conclusión

Monitorear la E/S de disco es una parte integral del mantenimiento del rendimiento y la estabilidad de una infraestructura de servidor. Las utilidades iostat y dstat permiten identificar situaciones de sobrecarga y evaluar el estado del subsistema de disco, mientras que herramientas como iotop, pidstat y lsof ayudan a identificar procesos específicos y la naturaleza de su carga.

La aplicación regular del enfoque descrito, la correcta interpretación de métricas y la gestión de prioridades de E/S ayudan a reducir los tiempos de respuesta del servicio, aumentar la previsibilidad de la carga y asegurar el cumplimiento de los requisitos de SLA. Posteriormente, esta metodología puede expandirse a través de monitoreo centralizado y automatización del análisis de carga de E/S.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA