Linux: ¿cómo puedo ver qué está esperando el disco IO?


42

Tengo un servidor que tiene una carga realmente alta. Nada me llama la atención en términos de uso de CPU, y no se intercambia.

Creo que es porque algunos procesos están esperando el disco IO, y quiero ver qué está esperando.

¿Hay algún programa que me muestre qué procesos están esperando IO? Lo sé, iotoppero eso muestra lo que está haciendo actualmente IO.

¿O es una pregunta tonta? (Si es así, explique cómo :))

Respuestas:


47

Puede usar un monitor de E / S como iotop, pero solo le mostrará procesos o subprocesos con las operaciones de E / S actuales.

Si necesita examinar procesos que esperan E / S, use watch para monitorear procesos con el indicador STAT 'D' como se muestra a continuación:

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"

Dulce. Esto me ayudó muy bien.
Stu Thompson

2
Alternativamente, puede usar el comando 'iotop -o' que solo mostrará 'procesos o hilos que realmente hacen E / S' según iotop --help.
Ryan

1
@Ryan Aparte de no proporcionar la iowaitinformación requerida , iotoprequiere privilegios elevados. watch, psy awkbrinde solo la información necesaria, y no requiere privilegios elevados.
Rico

44
Hubiera usado pslos indicadores POSIX y los awkhubiera editado de manera diferente: watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"- de esta manera obtienes los encabezados de columna, y el stat, pid y command.
Rico

18

ps axuy busque procesos que estén en el estado "D". Según la página de manual de ps (1) , los procesos que se encuentran en el estado D están en suspensión ininterrumpida, lo que casi siempre significa 'esperando IO'. Desafortunadamente, matar estos procesos generalmente no es posible.


16

La respuesta de Zanchey es la mejor que sé para averiguar qué está esperando a IO.

Cuando dice que su servidor está bajo una carga alta, ¿qué quiere decir con eso? ¿Algo en particular tarda en responder?

Si se pregunta si su Disk IO es el cuello de botella, usaría el comando iostat (parte del paquete sysstat) para ver si el disco está realmente bajo una gran carga.

Ejemplo:

[kbrandt@kbrandt-opadmin: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

1
Sería útil explicar cómo interpretar la salida de iostat "para ver si el disco está realmente bajo una gran carga".
Scott Buchanan

0

Habilite el registro block_dump de los procesos que realizan operaciones de lectura / escritura en bloque:

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

cuando termine, desactive el rastreo para no enviar spam a sus archivos de registro:

echo 0 > /proc/sys/vm/block_dump
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.