116 votos

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

¿Existe una buena utilidad de línea de comandos para controlar la carga del disco duro en linux? Algo como top pero luego monitorear la actividad del disco es decir el uso de la cpu.

Más concretamente, sospecho que para algunos servidores (de carga pesada) después de varias optimizaciones en varias partes del programa(s) que se ejecutan en él, ahora mismo el cuello de botella es simplemente el registro en los archivos del disco. Pero me resulta muy difícil evaluar cuánto tráfico pueden soportar los servidores.

Mi herramienta ideal sería algo que imprimiera "Estás usando el 35% del ancho de banda de tu disco en este momento". ¿Alguna idea?

2 votos

Pregunta perfecta, es exactamente lo que estaba buscando =)

0 votos

Es posible leer sysfs directamente, como /sys/block/sda/stat . El campo #1 da el total de lecturas, el campo #5 es el total de escrituras, el campo #9 es el número de operaciones de E/S en curso. Ver más en kernel.org/doc/Documentation/iostats.txt Los valores son unsigned long y pueden envolverse.

0 votos

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 entrar y comprobar cosas, pero uno realmente necesita datos históricos.

94voto

Dave Cheney Puntos 13302

Se puede obtener una buena medida de esto utilizando el iostat herramienta.

% 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. Se define como

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

3 votos

¿En qué paquete reside esto en Debian, si es que hay alguno? apt-cache dump no apareció nada para iostat

12 votos

@Brian: Está en el paquete sysstat (a través de yum de todos modos...)

0 votos

No pude encontrar esto en RHEL 6.5. ¿Está disponible para RHEL?

86voto

Tim Howland Puntos 3650

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

enter image description here

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

1 votos

De hecho, no está instalado por defecto en Ubuntu, por lo que uno podría emitir: sudo apt-get install iotop para conseguirlo

1 votos

iotop requiere un kernel superior a 2.6.20, lo que lamentablemente descarta tanto RedHat el4 como el5.

2 votos

A partir de RedHat 5.4, las partes necesarias para que iotop funcione han sido retrocedidas. ¡Que lo disfrutes!

17voto

Como sugiere sastanin en los comentarios, se pueden procesar directamente los valores dados en /sys/block/sda/stat o /proc/diskstats . Esto puede ser útil cuando no se dispone de ninguna de las otras herramientas mencionadas y no se pueden instalar 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

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

5voto

user2987 Puntos 61

para saber cuál es su ancho de banda total puede utilizar hdparm -T /dev/sda para probar el rendimiento de la caché del búfer (fileio) hdparm -t /dev/sda para probar el rendimiento de lectura del dispositivo

ejemplos: mi portátil obtiene 82MB/seg del disco SATA y 2GB/seg de la caché. Mi dekstop obtiene 12 GB/s de la caché y 500 MB/s de la matriz RAID HW. Sospecho que estas últimas cifras podrían ser el doble en un hardware de clase de servidor.

Poner readahead más alto que 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  

tiempos de lectura de 1GB con diferentes tamaños de bloque y diferentes velocidades de lectura

0 votos

Bienvenido a SF. Puedes utilizar el resaltado de código en tus mensajes poniendo comillas alrededor de las cadenas o sangrar los párrafos.

0 votos

Dos cosas - 1) --setra es ahora -a y 2), el hdparm -{T,t} Los comandos sólo emiten lecturas de disco, según strace por lo que no son destructivos. (Se aplica la exención de responsabilidad estándar sobre los consejos en Internet)

3voto

Scott Gottreu Puntos 1253

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: