La herramienta iostat es fundamental en entornos Linux/Unix para la supervisión de la actividad de entrada/salida (I/O) de los dispositivos de almacenamiento. Proporciona métricas vitales como la velocidad de lectura y escritura del disco, el tiempo de espera de I/O y el uso de la CPU. Su utilidad radica en la capacidad de ayudar a los administradores de sistemas a identificar cuellos de botella y optimizar el rendimiento del servidor.
Opciones y Parámetros del Comando iostat
Para obtener una visión general de las capacidades de iostat, se puede consultar su manual de ayuda directamente en la terminal:
# iostat --help
Usage: iostat [ options ] [ <intervalo> [ <conteo> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ [ -T ] -g <nombre_grupo> ] [ -p [ <dispositivo> [,...] | ALL ] ]
[ <dispositivo> [...] | ALL ]
A continuación, se detallan algunas de las opciones más comunes:
-c: Limita la salida a las estadísticas de utilización de CPU.-d: Muestra exclusivamente la información relacionada con la actividad I/O de los discos.-k: Presenta las estadísticas de I/O en kilobytes por segundo (KB/s).-m: Presenta las estadísticas de I/O en megabytes por segundo (MB/s).-t: Incluye una marca de tiempo en el formatoYYYY-MM-DD HH:MM:SScon cada informe.-p: Muestra estadísticas para dispositivos de bloque y todas las particiones que estén en uso.-V: Muestra la versión del programa y luego sale.-x: Proporciona estadísticas extendidas de los dispositivos.
Los parámetros <intervalo> y <conteo> permiten definir la frecuencia y el número de informes, respectivamente. <intervalo> especifica el tiempo en segundos entre cada informe, mientras que <conteo> determina cuántos informes se generarán.
Ejemplos Prácticos de iostat
Verificación de la Versión de iostat
Para conocer la versión de la suite sysstat (a la que pertenece iostat) instalada en el sistema:
# iostat -V
sysstat version 12.5.2
(C) Sebastien Godard (sysstat <at> orange.fr)
Uso Básico sin Argumentos
Ejecutar iostat sin opciones ni parámetros muestra un resumen general del estado del sistema desde el último reinicio, incluyendo el uso de CPU y las estadísticas de I/O del disco:
# iostat
Linux 5.15.0-86-generic (server-prod) 2024-08-15 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.25 0.00 1.78 0.12 0.00 92.85
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 25.30 120.45 345.10 23423456 678901234
Informes Periódicos del Sistema
Para monitorear el sistema con informes que se actualizan cada 3 segundos, mostrando un total de 2 informes:
# iostat 3 2
Linux 5.15.0-86-generic (server-prod) 2024-08-15 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.25 0.00 1.78 0.12 0.00 92.85
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 25.30 120.45 345.10 23423456 678901234
avg-cpu: %user %nice %system %iowait %steal %idle
7.10 0.00 2.50 0.80 0.00 89.60
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 38.10 210.00 450.00 630 1350
Visualización Exclusiva de Estadísticas de Disco
Si solo interesan los detalles de I/O del disco, se utiliza la opción -d. Para un monitoreo continuo de la actividad del disco cada 2 segundos:
# iostat -d 2
Linux 5.15.0-86-generic (server-prod) 2024-08-15 _x86_64_ (8 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 25.30 120.45 345.10 23423456 678901234
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 15.20 0.00 250.00 0 500
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 18.50 0.00 310.00 0 620
Cambio de Unidades para la Salida de Datos
Para visualizar los datos de I/O en KB/s o MB/s, se usan las opciones -k y -m respectivamente:
# iostat -k
Linux 5.15.0-86-generic (server-prod) 2024-08-15 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.25 0.00 1.78 0.12 0.00 92.85
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 25.30 120.45 345.10 23423456 678901234
# iostat -m
Linux 5.15.0-86-generic (server-prod) 2024-08-15 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.25 0.00 1.78 0.12 0.00 92.85
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
nvme0n1 25.30 0.12 0.34 22874 663364
Detalles Extendidos de I/O de un Disco Específico
La opción -x proporciona un informe detallado con estadísticas adicionales, útil para diagnósticos avanzados. Se puede especificar un dispositivo, como /dev/nvme0n1:
# iostat -x /dev/nvme0n1
Linux 5.15.0-86-generic (server-prod) 2024-08-15 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.25 0.00 1.78 0.12 0.00 92.85
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
nvme0n1 0.00 25.50 0.80 24.50 120.45 345.10 36.20 0.05 1.90 5.00 1.80 0.80 2.00
Explicación de las columnas clave en el informe extendido:
rrqm/s: Número de solicitudes de lectura unificadas por segundo (fusionadas).wrqm/s: Número de solicitudes de escritura unificadas por segundo (fusionadas).r/s: Número de solicitudes de lectura por segundo.w/s: Número de solicitudes de escritura por segundo.rkB/s: Cantidad de datos leídos del dispositivo por segundo en KB.wkB/s: Cantidad de datos escritos en el dispositivo por segundo en KB.avgrq-sz: Tamaño medio de las solicitudes (en sectores).avgqu-sz: Longitud media de la cola de solicitudes.await: Tiempo medio (en ms) que las solicitudes de I/O esperan en la cola y son atendidas.svctm: Tiempo medio (en ms) de servicio para las solicitudes de I/O del dispositivo.%util: Porcentaje de tiempo durante el cual el dispositivo estuvo ocupado gestionando solicitudes de I/O.
Monitoreo de la Utilización de la CPU
Para centrarse exclusivamente en las estadísticas de CPU, se usa la opción -c. Por ejemplo, para obtener 2 informes de CPU cada 4 segundos:
# iostat -c 4 2
Linux 5.15.0-86-generic (server-prod) 2024-08-15 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.25 0.00 1.78 0.12 0.00 92.85
avg-cpu: %user %nice %system %iowait %steal %idle
6.15 0.00 2.10 0.05 0.00 91.70
Significado de las métricas de CPU:
%user: Porcentaje de tiempo de CPU utilizado por procesos de espacio de usuario.%nice: Porcentaje de tiempo de CPU utilizado por procesos de usuario con prioridad modificada (nice).%system: Porcentaje de tiempo de CPU utilizado por el kernel (espacio de sistema).%iowait: Porcentaje de tiempo que la CPU estuvo inactiva esperando que se completaran operaciones de I/O.%steal: Porcentaje de tiempo que una máquina virtual "robó" la CPU a otra (relevante en entornos virtualizados).%idle: Porcentaje de tiempo que la CPU estuvo completamente inactiva.
Interpretación de Resultados para Diagnóstico
Análisis de Estadísticas de Disco
Al evaluar el rendimiento del sistema con iostat, es crucial considerar la interrelación entre las métricas de disco y CPU. La identificación de cuellos de botella en el subsistema de disco se basa en la observación de varios indicadores:
- Un alto valor en
r/s(lecturas por segundo) ow/s(escrituras por segundo) sugiere una intensa demanda de I/O, lo que podría indicar la necesiadd de discos más rápidos o una configuración de almacenamiento optimizada. - Valores elevados de
await(tiempo de espera de I/O) ysvctm(tiempo de servicio) pueden señalar que los discos tienen dificultades para procesar las solicitudes a tiempo, sugiriendo una posible sobrecarga o un controlador de disco ineficiente. - Un
%utilcercano al 100% indica que el dispositivo está constantemente ocupado, lo que es un claro indicio de un cuello de botella de I/O.
Análisis de Estadísticas de CPU
Las métricas de CPU también son fundamentales para el diagnóstico de rendimiento:
- Si
%usery%systemson consistentemente altos, la CPU está fuertemente cargada por aplicaciones de usuario y/o procesos del kernel, lo que podría requerir una actualización de la CPU o la adición de más núcleos. - Un
%iowaitelevado indica que la CPU pasa mucho tiempo inactiva esperando que las operaciones de I/O se completen. Esto suele apuntar a un cuello de botella en el almacenamiento, que arrastra el rendimiento general del sistema. - Un
%idlealto es ideal, ya que significa que la CPU tiene recursos disponibles. Sin embargo, si el sistema responde lentamente a pesar de un%idlealto, podría ser un signo de que la CPU está esperando por memoria RAM, sugiriendo una necesidad de aumentar la capacidad de memoria. - Un
%idlebajo indica una CPU con mucha carga de trabajo, lo que puede requerir optimizar las aplicaciones o escalar los recursos de CPU.