Supervisión de E/S de disco con iostat y dstat: cómo detectar cuellos de botella | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Supervisión de E/S de disco con iostat y dstat: detección de cuellos de botella

Introducción

La supervisión de las operaciones de entrada-salida del disco es una de las tareas clave a la hora de gestionar servidores en una infraestructura de alojamiento. El subsistema de disco afecta directamente al 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á dirigido a administradores de sistemas, ingenieros de DevOps y propietarios de servidores. Abarca las utilidades iostat y dstat, los principios de su funcionamiento, la interpretación de las métricas y un enfoque práctico para detectar cuellos de botella de E/S de disco en un entorno de alojamiento.

Información general y principios de funcionamiento

E/S de disco en una infraestructura de servidores

La entrada-salida de disco incluye operaciones de lectura y escritura de datos en dispositivos de bloques. En escenarios reales de alojamiento, la carga en el subsistema de disco suele generarse principalmente 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 de eventos;
  • archivos de intercambio y temporales;
  • scripts de usuario y tareas cron.

Pueden producirse cuellos de botella debido a dispositivos de almacenamiento lentos, una alta contienda entre procesos, programadores de E/S no óptimos, un funcionamiento incorrecto del almacenamiento en caché o funciones de 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 la intensidad con la que se está utilizando un disco concreto, si hay una cola de peticiones 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 y procesos. Permite correlacionar la actividad del disco con la carga global del servidor y resulta muy útil para realizar diagnósticos rápidos.

Tip

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

Requisitos previos y condiciones

Antes de iniciar 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 capacidad 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 pertinente:

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 identificar retrasos y colas de E/S.

Sintaxis:

sudo iostat [options] [interval] [count]

Parámetros más utilizados:

  • -x: estadísticas ampliadas;
  • -d: datos solo del disco;
  • -k: salida en kilobytes;
  • -p: estadísticas de particiones o de 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 realizar un seguimiento de los cambios en la carga a lo largo del tiempo, en lugar del 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 mientras espera operaciones de E/S. Un aumento de esta métrica indica el impacto del disco en el rendimiento general.
  • %steal: relevante para servidores virtuales, muestra el tiempo de CPU «robado».

Métricas clave del disco:

  • %util: porcentaje de tiempo en que el disco ha estado ocupado. Los valores que superan de forma constante el 80-90 % indican saturación del dispositivo.
  • r_await: el tiempo medio (ms) que tardan en completarse las operaciones de lectura (incluido el tiempo de cola).
  • w_await: el tiempo medio (ms) que tardan en completarse las operaciones de escritura (incluido el tiempo de cola).
  • aqu-sz: (tamaño medio de la cola) longitud media de la cola de solicitudes del disco. Un valor > 1 ya indica que se está formando una cola. Un valor > 2-4 para discos duros (HDD) o > 1-2 para discos SSD es señal de que el disco no está dando abasto con la carga.

La diferencia entre «await» y «svctm» indica si el retraso se debe a la cola, en lugar de a la velocidad física del disco.
Si «await» solo supera ligeramente a «svctm» (diferencia < 20-30 %), los retrasos se deben principalmente al propio disco (lectura/escritura física lenta).
Si «await» es significativamente mayor que «svctm» (diferencia > 50-100 %), el retraso principal se debe a la cola de solicitudes (el valor de «aqu-sz» será elevado), lo que indica una sobrecarga del disco debido a numerosas solicitudes paralelas.

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

Análisis de la situación general con dstat

Se utiliza dstat 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 realizar el análisis, presta atención a:

  • el aumento de iowait en la CPU;
  • picos de lectura o escritura;
  • la actividad simultánea de la red y del 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 entre dstat e iostat:

Criterios iostat dstat
Precisión de los datos Alta Alta
Modo en tiempo real Limitada Excelente
Datos históricos Sí (sar) No
Salida en color No
Ampliabilidad No Complementos
Exportación a CSV No
Carga de la CPU Baja Media

Info

dstat resulta especialmente útil para detectar picos de carga a corto plazo que no siempre se aprecian en iostat.

Identificación de cuellos de botella en la E/S del disco

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

sudo iostat -mx 2 sudo iostat -p /dev/vda 2 5 sar -d 1 5

Señales típicas de un problema:

  • %util por encima del 80 % durante un periodo prolongado;
  • un tiempo de espera superior a 20-30 ms para SSD o superior a 50-100 ms para HDD;
  • un valor de aqu-sz superior a 2-3, lo que indica acumulación de colas.

En el ejemplo se utiliza el disco /dev/vda; se trata de un disco virtual (VirtIO) en un servidor virtual.

En servidores físicos y en otros entornos, los discos pueden tener nombres diferentes:

  • /dev/sdX (p. ej., /dev/sda): discos SATA/SAS/USB normales
  • /dev/nvmeXnY (p. ej., /dev/nvme0n1): unidades NVMe
  • /dev/vdX: discos virtuales

Identificación de los procesos que provocan una elevada carga de E/S de disco

Una vez constatada la sobrecarga del subsistema de disco mediante 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 la carga no permite adoptar las medidas correctivas adecuadas.

Uso de iotop

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

sudo iotop -ao

Parámetros del comando:

-a: muestra estadísticas acumuladas desde que se inició el proceso, lo que ayuda a identificar tareas en segundo plano con E/S prolongadas;

-o: muestra únicamente aquellos 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, hay que prestar especial atención a los campos DISK READ, 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, se puede utilizar pidstat, que forma parte del paquete sysstat.

pidstat -d 1

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

Info

pidstat resulta especialmente útil en situaciones en las que la carga aparece periódicamente y es posible que iotop no siempre la detecte.

Uso de lsof para el análisis de la actividad de los archivos

En los casos en los que sea necesario comprender con qué archivos o directorios concretos está trabajando un proceso, se utiliza la utilidad lsof.

lsof +D /path

Donde/path es un directorio específico en el que es necesario identificar los archivos y procesos activos. Por ejemplo, podría tratarse de un directorio de base de datos, un directorio de copias de seguridad o un área de archivos temporales.

El comando permite determinar qué procesos mantienen actualmente descriptores de archivo y están realizando operaciones dentro de la ruta especificada, lo cual resulta especialmente útil a la hora de analizar la carga generada por las aplicaciones.

Análisis del contexto de la carga

Identificar un proceso con una elevada actividad de disco no es el objetivo final. El administrador debe evaluar el contexto de su funcionamiento:

  • ¿es la carga esperada para este servicio?;
  • ¿se está ejecutando el proceso en un momento adecuado (p. ej., copias de seguridad durante las horas punta)?;
  • ¿se pueden modificar la programación o los parámetros operativos?;
  • ¿es admisible reducir la prioridad de E/S?

Este enfoque permite distinguir entre una carga normal y una carga problemática, así como 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 en %util, await o aqu-sz en iostat coinciden en el tiempo con la actividad de los procesos en iotop o pidstat;
  • el aumento de «iowait» en «dstat» coincide con las operaciones de disco, y no con la carga de la CPU;
  • las mediciones repetidas muestran un patrón de carga reproducible.

Para la recopilación de datos y su posterior análisis, se recomienda utilizar el registro:

sar -d 1 100 > io.log

Esto permite registrar el comportamiento del subsistema de disco durante un periodo determinado y utilizar los datos a la hora de investigar incidencias.

Errores habituales y características operativas

En la práctica del funcionamiento de los servidores de alojamiento, los siguientes problemas son los más habituales:

  • ejecutar copias de seguridad y sincronizaciones de datos durante las horas punta;
  • uso intensivo del espacio de intercambio cuando no hay suficiente RAM;
  • un programador 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 disminuir el impacto de las tareas en segundo plano sobre la capacidad de respuesta del sistema.

Ejemplo de uso:

ionice -c3 rsync /source /destination

Prioridades clave:

  • -c1 (tiempo real): la prioridad más alta. Se utiliza para tareas en las que la latencia es crítica. Puede bloquear por completo otros procesos.
  • -c2 (mejor esfuerzo): el valor predeterminado para la mayoría de los procesos. Permite ajustar el nivel de prioridad (de 0 [alto] a 7 [bajo]).
  • -c3 (inactivo): en segundo plano. El proceso solo tendrá acceso al disco cuando ningún otro proceso lo esté utilizando. Es seguro y recomendado 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 el impacto 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 fundamental del mantenimiento del rendimiento y la estabilidad de una infraestructura de servidores. 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 interpretación correcta de las métricas y la gestión de las prioridades de E/S ayudan a reducir los tiempos de respuesta del servicio, a aumentar la previsibilidad de la carga y a garantizar el cumplimiento de los requisitos del SLA. Posteriormente, esta metodología puede ampliarse mediante la supervisión centralizada y la automatización del análisis de la 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