Introducción
En la administración de sistemas Linux, conocer el comportamiento de la entrada y salida (I/O) es fundamental para detectar cuellos de botella y optimizar el rendimiento. El comando iostat, parte del paquete sysstat, ofrece una visión clara y en tiempo real de las estadísticas de los dispositivos de bloque y de la CPU.
Qué es iostat
iostat significa Input/Output Statistics y se encarga de reportar métricas como transferencias por segundo, cantidad de datos leídos y escritos, tiempo de espera y utilización del dispositivo. Su salida ayuda a administradores y desarrolladores a entender si el almacenamiento está saturado o si la CPU está esperando operaciones de I/O.
Instalación
En la mayoría de las distribuciones modernas, iostat no viene instalado por defecto. Para obtenerlo basta con instalar el paquete sysstat. En Debian/Ubuntu se ejecuta:
- sudo apt update
- sudo apt install sysstat
En Red Hat/CentOS el comando es:
- sudo yum install sysstat
Tras la instalación, el servicio sysstat se inicia automáticamente y comienza a recopilar datos que iostat puede mostrar.
Sintaxis básica
La forma más simple de usar iostat es ejecutarlo sin argumentos, lo que muestra un resumen desde el último arranque:
iostat
Para obtener muestras periódicas se añaden dos parámetros: el intervalo en segundos y el número de reportes deseados. Por ejemplo, para ver tres actualizaciones cada dos segundos:
iostat 2 3
Opciones más usadas
iostat incluye varias banderas que amplían su capacidad de análisis:
- -c: muestra únicamente estadísticas de la CPU.
- -d: muestra únicamente estadísticas de los dispositivos.
- -k: muestra los valores en kilobytes en lugar de bloques.
- -m: muestra los valores en megabytes.
- -p NOMBRE: muestra estadísticas de una partición específica y de sus dispositivos subyacentes.
- -t: incluye una marca de tiempo en cada línea de salida.
- -x: muestra estadísticas extendidas, como await, svctm y %util.
Interpretación de los campos principales
Cuando se usa la opción -x, iostat muestra columnas que merecen atención:
- tps: transferencias por segundo (lecturas + escrituras).
- kB_read/s: kilobytes leídos por segundo.
- kB_wrtn/s: kilobytes escritos por segundo.
- kB_dscd/s: kilobytes descartados (útil en discos SSD).
- await: tiempo medio en milisegundos que una solicitud I/O espera ser atendida (incluye cola y servicio).
- svctm: tiempo medio de servicio de la solicitud (sin contar cola).
- %util: porcentaje de tiempo que el dispositivo estuvo ocupado atendiendo solicitudes. Un valor cercano al 100 % indica saturación.
Ejemplo práctico: monitorizar un disco en tiempo real
Supongamos que queremos observar el dispositivo /dev/sda cada segundo durante diez segundos, con estadísticas extendidas y en megabytes:
iostat -xm /dev/sda 1 10
La salida mostrará líneas como:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.10 12.34 5.67 120.5 45.2 28.5 0.12 8.45 7.20 10.10 1.20 23.4
En este caso, %util del 23 % indica que el disco tiene capacidad disponible, mientras que await alrededor de 8 ms muestra una latencia aceptable.
Ejemplo: combinar intervalo y marca de tiempo
Para llevar un registro histórico con marcas de tiempo útiles en scripts de监控, se puede usar:
iostat -xt 2 5 >> /var/log/iostat_log.txt
Cada reporte incluirá la fecha y hora, lo que facilita la correlación con eventos de la aplicación o con otros registros del sistema.
Uso conjunto con vmstat y sar
iostat se complementa perfectamente con vmstat, que reporta memoria, procesos y actividad de intercambio, y con sar, que almacena históricos de rendimiento. Un flujo típico de diagnóstico podría ser:
- Ejecutar vmstat 1 5 para ver si hay alta espera de I/O (campo wa).
- Si wa es elevado, lanzar iostat -x 1 5 para identificar qué dispositivo está causando la latencia.
- Usar sar -d para revisar tendencias a lo largo del día y confirmar si el problema es puntual o crónico.
Buenas prácticas y limitaciones
Algunos consejos para obtener mediciones fiables:
- Evitar ejecutar iostat en un entorno con carga extrema de CPU, ya que el propio proceso consume ciclos.
- Utilizar intervalos suficientemente largos (al menos 1 segundo) para capturar promedios representativos.
- Recordar que iostat muestra métricas a nivel de bloque; no revela detalles de sistemas de archivos como latencias de NFS o de capas de caché.
- En sistemas virtualizados, los números pueden reflejar la actividad del hipervisor más que del disco físico subyacente.
Despite these caveats, iostat sigue siendo una herramienta indispensable para cualquier profesional que necesite validar el rendimiento de almacenamiento en Linux.
Conclusión
El comando iostat brinda una ventana clara hacia las estadísticas de entrada y salida, permitiendo detectar cuellos de botella, planificar capacidad y optimizar aplicaciones. Su sintaxis sencilla, combinada con opciones flexibles y la posibilidad de integrarlo con otras utilidades de monitoreo, lo convierte en un componente esencial del kit de herramientas de administración de sistemas Linux.


