Monitorización de la E/S de disco con iostat y dstat
Introducción
La supervisión de la entrada/salida de disco (disk I/O) es una de las tareas clave en la operación de servidores en una infraestructura de hosting. El subsistema de disco influye directamente en el rendimiento de los servicios web, las bases de datos, las máquinas virtuales, los contenedores y las tareas en segundo plano. Incluso con suficiente memoria 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. Abarca las utilidades iostat y dstat, sus principios de funcionamiento, la interpretación de las métricas y un enfoque práctico para localizar cuellos de botella de E/S de disco en un entorno de hosting.
Información general y principios de funcionamiento
E/S de disco en una infraestructura de servidores
La entrada/salida de disco incluye las operaciones de lectura y escritura de datos en dispositivos de bloques. En escenarios reales de hosting, la carga sobre el subsistema de disco suele ser generada con mayor frecuencia por:
- bases de datos (MySQL, MariaDB, PostgreSQL);
- aplicaciones web con contenido dinámico;
- servicios de correo;
- copias de seguridad y sincronización de datos;
- registro (logging);
- swap y archivos temporales;
- scripts de usuario y tareas cron.
Los cuellos de botella pueden producirse por dispositivos de almacenamiento lentos, alta contención entre procesos, planificadores de E/S no óptimos, funcionamiento incorrecto de la caché o particularidades de la virtualización.
Finalidad de iostat y dstat
iostat es una utilidad del paquete sysstat diseñada para recopilar estadísticas detalladas sobre la carga de la CPU y de los dispositivos de disco. La tarea principal de iostat es mostrar con qué intensidad se utiliza un disco concreto, si existe una cola de solicitudes y cuál es el tiempo medio de espera de las operaciones.
dstat es una herramienta de monitorización versátil que muestra estadísticas en tiempo real de varios subsistemas a la vez: CPU, memoria, disco, red, procesos. Permite correlacionar la actividad del disco con la carga global del servidor y resulta cómoda para el diagnóstico rápido.
Estas utilidades se complementan: iostat ofrece una imagen precisa a nivel de dispositivo, mientras que dstat aporta el contexto de todo el sistema.
Requisitos previos
Antes de comenzar el análisis deben cumplirse las siguientes condiciones:
- Sistema operativo Linux (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- Acceso SSH al servidor.
- Privilegios de root o la posibilidad de ejecutar comandos mediante sudo.
Comprobación de la versión del sistema operativo:
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 # or sudo dnf install sysstat dstat
Comprobación del funcionamiento de sysstat:
systemctl status sysstat
Si el servicio está activo, se mostrará la información correspondiente:
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 con iostat
La utilidad iostat se utiliza para evaluar la carga de la CPU y del subsistema de disco, así como para detectar retardos y colas de E/S.
Sintaxis:
sudo iostat [options] [interval] [count]
Parámetros más utilizados:
- -x - estadísticas ampliadas;
- -d - solo datos de disco;
- -k - salida en kilobytes;
- -p - estadísticas de particiones o de un dispositivo concreto.
Ejemplo básico:
sudo iostat -x
Análisis dinámico:
sudo iostat -xk 5 3
El intervalo y el número de muestras permiten seguir la evolución de la carga a lo largo del tiempo, en lugar de ver el estado medio desde el arranque del sistema.
Ejemplo de salida de iostat

Métricas clave de la CPU:
- %iowait - el porcentaje de tiempo que la CPU permanece inactiva esperando operaciones de E/S. Un aumento de esta métrica indica la influencia del disco en el rendimiento general.
- %steal - relevante para servidores virtuales; muestra el tiempo de CPU «robado».
Métricas clave del disco:
- %util - el porcentaje de tiempo que el disco estuvo ocupado. Valores sostenidos por encima del 80-90 % indican saturación del dispositivo.
- r_await - el tiempo medio (ms) de finalización de las operaciones de lectura (incluido el tiempo en cola).
- w_await - el tiempo medio (ms) de finalización de las operaciones de escritura (incluido el tiempo en cola).
- aqu-sz - (avg queue size) la longitud media de la cola de solicitudes del disco. Un valor > 1 ya indica que se está formando una cola. Un valor > 2-4 en HDD / > 1-2 en SSD es señal de que el disco no da abasto con la carga.
La diferencia entre await y svctm muestra si el retardo lo causa la cola y no la velocidad física del disco.
Si await supera a svctm solo ligeramente (diferencia < 20-30 %), los retardos los provoca principalmente el propio disco (lectura/escritura física lenta).
Si await es considerablemente mayor que svctm (diferencia > 50-100 %), el retardo principal lo causa la cola de solicitudes (aqu-sz será alto), lo que indica sobrecarga del disco por muchas solicitudes paralelas.
En las versiones modernas de iostat (como en el ejemplo), svctm no se muestra porque su cálculo no es fiable. Para el análisis se utiliza la combinación de await + aqu-sz: un await alto con un aqu-sz bajo (~0) indica un disco lento; un await alto con un aqu-sz alto (>1) indica que el disco está sobrecargado de solicitudes.
Análisis del panorama 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 intervalo:
dstat -rd --disk-util 1 5
Durante el análisis, preste atención a:
- el aumento de iowait en la CPU;
- los picos de lectura o escritura;
- la actividad simultánea de red y disco (copias de seguridad, sincronización).
Example dstat output: 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:
| Criterio | iostat | dstat |
|---|---|---|
| Precisión de los datos | Alta | Alta |
| Modo en tiempo real | Limitado | Excelente |
| Datos históricos | Sí (sar) | No |
| Salida en color | No | Sí |
| Extensibilidad | No | Plugins |
| Exportación a CSV | No | Sí |
| Carga de CPU | Baja | Media |
dstat es especialmente útil para picos de carga de corta duración que no siempre se aprecian en iostat.
Identificación de cuellos de botella de E/S de disco
Para el diagnóstico rápido se utilizan los siguientes comandos:
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 periodo prolongado;
- await por encima de 20-30 ms en SSD o por encima de 50-100 ms en HDD;
- aqu-sz superior a 2-3, lo que indica acumulación en la cola.
En el ejemplo se utiliza el disco /dev/vda: es un disco virtual (VirtIO) en un servidor virtual.
En servidores físicos y en otros entornos, los discos pueden tener nombres distintos:
- /dev/sdX (p. ej., /dev/sda) - discos SATA/SAS/USB convencionales
- /dev/nvmeXnY (p. ej., /dev/nvme0n1) - unidades NVMe
- /dev/vdX - discos virtuales
Identificación de los procesos que causan una alta carga de E/S de disco
Una vez confirmada la sobrecarga del subsistema de disco con iostat y dstat, el siguiente paso es identificar los procesos concretos que inician operaciones intensivas de lectura o escritura. El análisis a nivel de dispositivo sin identificar la fuente de la carga no permite aplicar medidas correctivas adecuadas.
Uso de iotop
La herramienta principal para encontrar procesos que utilizan activamente el disco es la utilidad iotop.
sudo iotop -ao
Parámetros del comando:
-a - muestra estadísticas acumuladas desde el inicio del proceso, lo que ayuda a identificar tareas en segundo plano con E/S sostenida a largo plazo;
-o - muestra únicamente los procesos que están realizando operaciones de E/S en ese momento.
Ejemplo de salida:
TID 41PRIO USER41DISK READ41DISK WRITE41SWAPIN41IO>4141COMMAND 1105641be/441mysql410.00 B 413.44 M410.00 %410.76 %41mysqld 258041be/441rsync410.00 B4123.48 M410.00 %411.17 %41rsync
En la salida de iotop debe prestarse especial atención a los campos DISK READ y DISK WRITE y al porcentaje de tiempo de E/S. Normalmente, las fuentes de carga son procesos de bases de datos, procesos de copia de seguridad, procesos de sincronización de archivos o scripts de usuario.
Uso de pidstat para el análisis de E/S por proceso
Para un análisis más formalizado y repetible puede utilizarse pidstat, que forma parte del paquete sysstat.
pidstat -d 1
Este comando muestra estadísticas de E/S de disco de cada proceso a intervalos de un segundo. Es útil para detectar picos de actividad de corta duración y correlacionarlos con otras métricas del sistema.
pidstat es especialmente útil cuando la carga aparece de forma periódica y iotop no siempre llega a capturarla.
Uso de lsof para el análisis de la actividad de archivos
Cuando es necesario saber con qué archivos o directorios concretos trabaja un proceso, se utiliza la utilidad lsof.
lsof +D /path
Donde /path es un directorio concreto dentro del cual se desea identificar archivos y procesos activos. Por ejemplo, puede ser el directorio de la base de datos, el directorio de copias de seguridad o la zona de archivos temporales.
El comando permite determinar qué procesos mantienen actualmente descriptores de archivo abiertos y realizan operaciones dentro de la ruta indicada, lo que resulta especialmente útil al analizar la carga generada por aplicaciones.
Análisis del contexto de la carga
Identificar un proceso con alta actividad de disco no es el objetivo final. El administrador debe evaluar el contexto de su ejecución:
- si la carga es esperable para ese servicio;
- si el proceso se ejecuta en un momento adecuado (p. ej., copias de seguridad en horas punta);
- si es posible cambiar la planificación o los parámetros de funcionamiento;
- si es admisible reducir la prioridad de E/S.
Este enfoque permite distinguir la carga normal de la problemática y elegir el método de optimización adecuado.
Verificación de la corrección del análisis
La corrección del análisis realizado se confirma si:
- los picos de %util, await o aqu-sz en iostat coinciden en el tiempo con la actividad de procesos en iotop o pidstat;
- el aumento de iowait en dstat coincide con operaciones de disco y no con la carga de la CPU;
- las mediciones repetidas muestran un patrón de carga reproducible.
Para acumular datos y analizarlos posteriormente, se recomienda utilizar el registro en archivo:
sar -d 1 100 > io.log
Esto permite registrar el comportamiento del subsistema de disco durante un periodo determinado y utilizar los datos al investigar incidentes.
Errores típicos y particularidades operativas
En la práctica de la operación de servidores de hosting, los problemas más habituales son los siguientes:
- ejecución de copias de seguridad y sincronización de datos en horas punta;
- uso intensivo de swap por falta de RAM;
- un planificador de E/S inadecuado para el tipo de unidad;
- falta de priorización de las tareas en segundo plano.
Para reducir el impacto de los procesos en segundo plano sobre el rendimiento, se recomienda utilizar la utilidad ionice para gestionar la prioridad de E/S de un proceso, lo que permite atenuar el efecto de las tareas en segundo plano sobre la capacidad de respuesta del sistema.
Ejemplo de uso:
ionice -c3 rsync /source /destination
Prioridades principales:
- -c1 (realtime) - la prioridad más alta. Se utiliza para tareas críticas en cuanto a latencia. Puede bloquear por completo a otros procesos.
- -c2 (best-effort) - el valor por defecto para la mayoría de los procesos. Permite ajustar el nivel de prioridad (de 0 (alta) a 7 (baja)).
- -c3 (idle) - segundo plano. El proceso solo obtiene acceso al disco cuando ningún otro proceso lo está utilizando. Es seguro y recomendable para operaciones en segundo plano (copias de seguridad, sincronización de datos).
En este ejemplo, el proceso rsync se ejecuta con la prioridad de E/S más baja, lo que minimiza su impacto en las operaciones principales del sistema. El uso de ionice permite minimizar la influencia de los procesos en segundo plano sin necesidad de desactivarlos por completo.
Conclusión
La supervisión de la E/S de disco es una parte integral del mantenimiento del rendimiento y la estabilidad de una infraestructura de servidores. Las utilidades iostat y dstat permiten detectar situaciones de sobrecarga y evaluar el estado del subsistema de disco, mientras que herramientas como iotop, pidstat y lsof ayudan a identificar los procesos concretos y la naturaleza de su carga.
La aplicación regular del enfoque descrito, la correcta interpretación de las métricas y la gestión de las prioridades de E/S ayudan a reducir los tiempos de respuesta de los servicios, aumentar la previsibilidad de la carga y garantizar el cumplimiento de los requisitos de SLA. Posteriormente, esta metodología puede ampliarse mediante monitorización centralizada y la automatización del análisis de la carga de E/S.