¿Cómo puedo monitorear la carga del disco duro en Linux?

101

¿Existe una buena utilidad de línea de comandos para monitorear la carga del disco duro en Linux? Algo parecido, toppero luego monitorear el uso de la CPU iso de la actividad del disco.

Más específicamente, sospecho que para algunos servidores (carga pesada) después de varias optimizaciones en varias partes de los programas que se ejecutan en él, en este momento el cuello de botella es simplemente el registro de archivos en el disco. Pero me resulta muy difícil evaluar cuánto tráfico pueden manejar los servidores.

Mi herramienta ideal sería algo que imprima "Estás utilizando el 35% del ancho de banda de tu disco en este momento". ¿Algunas ideas?

Pieter
fuente
1
Pregunta perfecta, es exactamente lo que estaba buscando =)
rafa.ferreira
Es posible leer sysfs directamente, como /sys/block/sda/stat. El campo # 1 proporciona el número total de lecturas, el campo # 5 es el número total de escrituras, el campo # 9 es el número de operaciones de E / S en progreso. Ver más en kernel.org/doc/Documentation/iostats.txt Los valores son largos sin signo y pueden ajustarse.
sastanin
Esta es una muy buena pregunta porque siempre estamos luchando con este problema en los servidores Plesk. Sin embargo, lo que falta es how do you do it with SNMP?. Está bien iniciar sesión y verificar cosas, pero uno realmente necesita datos históricos.
Eugene van der Merwe
unix.stackexchange.com/questions/55212/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

83

Puede obtener una buena medida de esto utilizando la iostatherramienta.

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

La utilización del disco aparece en la última columna. Esto se define como

Porcentaje de tiempo de CPU durante el cual se emitieron solicitudes de E / S al dispositivo (utilización de ancho de banda para el dispositivo). La saturación del dispositivo ocurre cuando este valor es cercano al 100%.

Dave Cheney
fuente
3
¿En qué paquete reside esto en Debian, si hay alguno? apt-cache dumpno apareció nada para iostat
hBy2Py
99
@Brian: Está en el paquete sysstat (a través de ñam de todos modos ...)
Joe
No pude encontrar esto en RHEL 6.5. ¿Está disponible para RHEL?
Hazok
¿Puede funcionar esto sin tener que continuar con un retraso? ¿Intentar ejecutar una sola instancia para obtener datos obtiene el mismo número presumiblemente ya que no puede tomar muestras?
Wilf
@Hazok Es parte del sysstat RPM en RHEL 6.5.
TheGeneral
81

iotop es una versión de top que analiza cuánto IO está usando cada proceso. Está en los repositorios estándar de ubuntu; No sé si está en RHEL o Fedora, pero debería estarlo.

ingrese la descripción de la imagen aquí

Para los núcleos más antiguos (por ejemplo, CentOS 5.xo RHEL 5.x) que no admiten iotop, use topio en su lugar (documentado aquí: http://yong321.freeshell.org/freeware/pio.html#linux . Se basa en / proc // io para estadísticas io y proporciona una funcionalidad similar a iotop. Consulte el enlace para obtener más detalles.

Tim Howland
fuente
1
De hecho, no está instalado de manera predeterminada en Ubuntu, por lo que uno podría emitir: sudo apt-get install iotop para obtenerlo
Moshe
1
iotop requiere un núcleo superior a 2.6.20, que desafortunadamente descarta tanto RedHat el4 como el5.
Dave Cheney
2
A partir de RedHat 5.4, los bits necesarios para que iotop funcione han sido retroportados. ¡Disfrutar!
Dave Cheney
Está en Fedora :).
jamie
13

Como sugiere sastanin en los comentarios, puede procesar directamente los valores dados en /sys/block/sda/stato /proc/diskstats. Esto puede ser útil cuando ninguna de las otras herramientas mencionadas están disponibles y no puede instalarlas fácilmente.

Por ejemplo (IIUC) algo como esto (en bash) debería dar el número de lecturas por segundo:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

Consulte https://www.kernel.org/doc/Documentation/iostats.txt y https://www.kernel.org/doc/Documentation/block/stat.txt para obtener documentación.

Skippy le Grand Gourou
fuente
7

Debería echar un vistazo a atop , que combina el poder de iotop / top / iftop, todo en un solo lugar, y resalta las partes críticas de su sistema.

Yvan
fuente
5

Recomendaría echar un vistazo a la herramienta nmon. Le mostrará la carga en vivo en una serie de parámetros del sistema, así como la grabación de datos en un archivo para su posterior examen. Es una herramienta gratuita disponible aquí :

MikeyB
fuente
5

para averiguar cuál es su ancho de banda total, puede usar hdparm -T /dev/sdapara probar el rendimiento de la memoria caché del búfer (archivo) hdparm -t /dev/sdapara probar el rendimiento de lectura del dispositivo

ejemplos: mi computadora portátil obtiene 82 MB / seg. del disco SATA y 2 GB / seg. del caché. Mi dekstop obtiene 12 GB / seg. Del caché y 500 MB / seg. De la matriz RAID HW. Sospecho que esos últimos números podrían ser el doble en el hardware de clase de servidor.

establecer readahead superior a 256, 4096 funciona mejor para mí

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

veces leyendo 1 GB en diferentes tamaños de bloque y diferentes cabezas de lectura

usuario2987
fuente
Bienvenido a SF. Puede usar el resaltado de código en sus publicaciones colocando comillas en las cadenas o en los párrafos de sangría.
phaphink
Dos cosas: 1) --setraes ahora -a, y 2), los hdparm -{T,t}comandos solo emiten lecturas de disco strace, por lo que no son destructivas. (Se aplica el descargo de responsabilidad estándar sobre consejos en Internet)
i336_
4

La herramienta estándar para mostrar la carga del disco duro es iostat.

No le dirá cuánto% de ancho de banda de disco está usando, ya que no sabe cuánto ancho de banda tiene su disco. En cualquier caso, su disco solo tiene la cifra citada por el fabricante para grandes transferencias de datos contiguos.

Alnitak
fuente
3

Creo que RRDtool debería hacer lo que quieras aquí: usa un demonio para volcar los datos del sistema y luego te permite procesarlo como quieras. A menudo lo he usado para producir gráficos, etc. para medir la carga del sistema.

PixelSmack
fuente