Monitoreo de Rendimiento en Linux con iostat: Guía Esencial

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 formato YYYY-MM-DD HH:MM:SS con 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) o w/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) y svctm (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 %util cercano 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 %user y %system son 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 %iowait elevado 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 %idle alto es ideal, ya que significa que la CPU tiene recursos disponibles. Sin embargo, si el sistema responde lentamente a pesar de un %idle alto, podría ser un signo de que la CPU está esperando por memoria RAM, sugiriendo una necesidad de aumentar la capacidad de memoria.
  • Un %idle bajo indica una CPU con mucha carga de trabajo, lo que puede requerir optimizar las aplicaciones o escalar los recursos de CPU.

Etiquetas: linux iostat sysstat monitoreo de rendimiento I/O de disco

Publicado el 9-7 05:31