Cómo solucionar problemas de tiempo de espera de E/S elevado en Linux

El tiempo de espera de E/S es una métrica utilizada para medir la cantidad de tiempo que la CPU espera a que se completen las operaciones de E/S del disco. Un tiempo de espera de E/S alto indica que la CPU está inactiva y hay solicitudes de E/S pendientes. Si bien esto no hará que un sistema deje de funcionar, limitará el rendimiento de la CPU.

El tiempo de espera de E/S de la CPU significa que, si bien ningún proceso estaba en un estado ejecutable, al menos una operación de E/S estaba en curso. En términos simples, el tiempo de espera de E/S es el tiempo que tarda la CPU esperando que finalice la E/S.

¿Qué causa un tiempo de espera de E/S alto?

El tiempo de espera de E/S simplemente indica el estado de la CPU o los núcleos de la CPU. Una espera de E/S alta significa que la CPU tiene solicitudes pendientes. Sin embargo, una investigación adicional es necesaria para confirmar el origen y el efecto.

Estas son algunas de las posibles causas de un tiempo de espera de E/S alto:

  • Cuellos de botella en la capa de almacenamiento que hacen que la unidad tarde más tiempo en responder a las solicitudes de E/S
  • Cola de solicitudes de E/S en la capa de almacenamiento que conducen a un aumento de la latencia
  • Dispositivos bloqueados, tales como discos físicos, que son demasiado lentos o simplemente han alcanzado el punto de saturación
  • Procesos que se encuentran en un estado de pausa ininterrumpible
  • Procesos que realizan operaciones de lectura y escritura pesadas en el disco
  • Intercambio de una partición o archivo que se realiza debido a la escasez de RAM en el sistema operativo host o invitado
  • Operaciones de E/S de disco y red, que son la causa más común de lentitud del sistema
  • Disco lento o matriz RAID degradada que retrasa el acceso a la memoria para operaciones de lectura y escritura

¿La espera de E/S afecta el rendimiento de tu sistema?

Una espera de E/S alta obliga al servidor a manejar un ancho de banda superior para realizar otros cálculos mientras espera solicitudes de E/S. La espera de E/S es una métrica común para analizar el rendimiento del sistema. Cuando se produce una espera de E/S alta con frecuencia, puede afectar negativamente el rendimiento del sistema al ralentizarlo o causar problemas. Estos pueden incluir una baja velocidad de transferencia en la base de datos y una degradación del estado de salud en aplicaciones y bases de datos.

Diagnosticar el tiempo de espera de E/S en Linux

Los dos comandos más utilizados para identificar y solucionar problemas de tiempo de espera de E/S en Linux son top y vmstat. Estos comandos mostrarán varias estadísticas de nivel de CPU, incluido el tiempo de espera de E/S.

Usar el comando top

El comando top es el comando más fácil y utilizado para identificar el tiempo de espera de E/S en Linux. Muestra una vista dinámica y en tiempo real del sistema, estadísticas a nivel de CPU y una lista en ejecución de los procesos gestionados por el núcleo.

Sintaxis:

top [options]

Ejemplo:

Al ejecutar el comando top se mostrará una salida similar a la que se muestra a continuación:

Fig. 1: Output of the top command Fig. 1: salida del comando top

Nos centraremos en la línea %Cpu(s). Entre otras estadísticas importantes, muestra el tiempo de espera de E/S. El tiempo de espera de E/S se indica mediante la etiqueta wa en la línea %Cpu(s).

wa indica el porcentaje de tiempo que la CPU estaba esperando a que se completara la E/S. Si estás en un sistema con procesador de varios núcleos, puedes pulsar 1 mientras se ejecuta el comando top para obtener detalles sobre el uso de CPU por CPU.

Usar el comando vmstat

El comando vmstat es otra herramienta de monitoreo del rendimiento proporcionada por Linux. Suministra información sobre la memoria, los procesos, la CPU y más. Por defecto, vmstat muestra las estadísticas desde el último reinicio del sistema. También puede mostrar estadísticas en tiempo real que se actualizan después de un intervalo especificado.

Sintaxis:

vmstat [options][delay [count]]

Estos son los dos parámetros que se utilizan comúnmente con el comando vmstat:

  • Retraso: este parámetro se utiliza para actualizar continuamente los informes después del retardo especificado en segundos.
  • Recuento: este parámetro se utiliza para definir el número de actualizaciones necesarias. El valor predeterminado es infinito.

Ejemplo:

Al ejecutar el comando vmstat, obtendrás una salida similar a la que se muestra a continuación:

Fig. 2: Output of the vmstat command Fig. 2: salida del comando vmstat

La salida se divide en cuatro secciones. Nos centraremos en la sección CPU. Las columnas de esta sección son similares a la línea %Cpu(s) del comando top. Junto con el tiempo de espera de E/S (wa), también obtenemos información adicional a través del comando vmstat. Esta incluye la memoria libre total y el número de bloques intercambiados hacia y desde E/S. Por ejemplo, tener menos memoria libre puede aumentar el tiempo de espera de E/S.

Identificar los procesos que causan un tiempo de espera de E/S elevado

Una vez hayas confirmado que estás lidiando con un tiempo de espera de E/S elevado, el siguiente paso debe ser encontrar los procesos responsables de estas operaciones de E/S. Uno de los comandos más fáciles y más utilizados para esto es iotop.

Usar el comando iotop

El comando iotop es idéntico al comando top en el sentido de que se utiliza para monitorear el uso de E/S del disco junto con la lista de procesos en ejecución o hilos responsables. Está basado en Python y requiere acceso al kernel para monitorear los procesos que realizan E/S.

Sintaxis:

iotop [options]

Ejemplo:

Al ejecutar el comando iotop, obtendrás una salida similar a la que se muestra a continuación:

Fig. 3: Output of the iotop command Fig. 3: salida del comando iotop

La primera línea contiene el ancho de banda total de lectura y escritura del disco. La siguiente línea muestra el ancho de banda real de las operaciones de lectura y escritura realizadas por los procesos o hilos que actualmente realizan E/S. La siguiente sección muestra la lista de procesos en ejecución con datos sobre su uso actual de E/S del disco. La columna más importante aquí es la columna de E/S, que muestra el porcentaje de tiempo que el proceso estuvo realizando E/S con respecto a su tiempo total de procesamiento. Esta lista concreta de procesos está ordenada en orden inverso.

Una de las opciones más utilizadas con este comando es -o u -only. Al ejecutarlo junto con el comando (iotop -o), se reducen los resultados a una lista en ejecución de los procesos que realmente están haciendo E/S.

Identificar los discos que se están escribiendo mediante E/S

Los comandos top y vmstat nos informan sobre el tiempo de espera de E/S. El comando iotop nos ayuda a identificar los procesos que realizan operaciones de E/S. Otro factor importante a tener en cuenta es qué discos se están utilizando en estas operaciones. El comando iostat proporciona esta información.

Usar el comando iostat

El comando iostat muestra las estadísticas de entrada/salida del sistema. Genera informes a nivel de dispositivo al monitorear el período de tiempo activo en relación con las tasas de transferencia medias. Al igual que los comandos top y vmstat , iostat también muestra las estadísticas de la CPU.

Sintaxis:

iostat [option] [interval] [count]

Los parámetros de intervalo y recuento aquí son similares a los del comando vmstat. Se utilizan para mostrar actualizaciones en tiempo real de forma infinita o solo para recuentos específicos.

Ejemplo:

Al ejecutar el comando iostat, obtendrás una salida similar a la que se muestra a continuación:

Fig. 4: Output of the iostat command Fig. 4: salida del comando iostat

La primera línea muestra las estadísticas medias de CPU, incluido el tiempo de espera de E/S. Representa el mismo valor que wa en los comandos top y vmstat. Las posteriores secciones proporcionan los siguientes datos para todos los dispositivos y particiones:

  • Dispositivo: la partición o el nombre del dispositivo
  • tps: transferencia por segundo. Un procesador sobrecargado u ocupado siempre tendrá un tps más alto
  • blk_read/s (kB_read/s): el número de bloques de datos leídos del dispositivo por segundo
  • Blk_wrtn/s (kB_wrtn/s): el número de bloques de datos escritos en el dispositivo por segundo
  • blk_read (KB_read): el número total de bloques leídos desde este dispositivo desde el último reinicio
  • Blk_wrtn (KB_wrtn): el número total de bloques escritos en este dispositivo desde el último reinicio

Corregir el tiempo de espera de E/S elevado en Linux

Después de identificar los procesos que aumentan el tiempo de espera de E/S y los discos involucrados, hay varias correcciones que podemos aplicar. Estos son algunos de los métodos más comunes para minimizar el tiempo de espera de E/S elevado:

  • Reduce la frecuencia de lecturas y escrituras de disco disminuyendo las operaciones de E/S, tales como las consultas de base de datos.
  • Asegúrate de que el sistema operativo está actualizado a la última versión con todos los parches instalados para que se pueda reducir cualquier espera de E/S causada por errores en el sistema operativo.
  • Actualiza el disco duro y la RAM en el servidor e instala discos con RPM más altos o SSD con I/OPS alto.
  • Si el tiempo del usuario de la CPU es demasiado alto, intenta terminar el proceso o los procesos que causan el daño.
  • Comprueba el uso de intercambio: un uso de intercambio alto significa que el sistema está sin RAM. En este caso, el aumento de la RAM puede reducir el tiempo de espera de E/S.
  • Comprueba si existe una posible pérdida de memoria: algunas aplicaciones pueden consumir memoria sin liberarla después de su uso. Esto puede provocar una pérdida de memoria y, finalmente, un tiempo de espera de E/S alto.
Was this article helpful?
Supervise su entorno Linux

Verifique el estado y la disponibilidad de sus servidores Linux para obtener un rendimiento óptimo con la herramienta de monitoreo de Linux de Site24x7.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 "Learn" portal. Get paid for your writing.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 “Learn” portal. Get paid for your writing.

Apply Now
Write For Us