
Un breve resumen; Tengo un servidor de archivos de 10 Gbit con seis SSD de datos que ejecutan CentOS 8 y estoy luchando por saturar la línea. Todo está bien si limito el ancho de banda a 5 o 6 Gbps. Aquí hay algunos gráficos de Cockpit que muestran que todo está bien (~850 usuarios simultáneos, límite de 5 Gbps).
Desafortunadamente, cuando presiono más, el ancho de banda fluctúa en ondas gigantes. Normalmente, eso es una señal de un disco saturado (o tarjeta SATA), y en las cajas de Windows lo resolví de esta manera:
- Abra "Monitor de recursos".
- Seleccione la pestaña "Disco".
- Mire los gráficos de "Longitud de la cola". Cualquier disco/raid con una longitud de cola constantemente superior a 1 es un cuello de botella. Actualízalo o reduce su carga.
Ahora veo estos síntomas en un servidor CentOS 8, pero ¿cómo puedo identificar al culpable? Mis SSD SATA están divididos en tres matrices RAID0 de software como esta:
# cat /proc/mdstat
Personalities : [raid0]
md2 : active raid0 sdg[1] sdf[0]
7813772288 blocks super 1.2 512k chunks
md0 : active raid0 sdb[0] sdc[1]
3906764800 blocks super 1.2 512k chunks
md1 : active raid0 sdd[0] sde[1]
4000532480 blocks super 1.2 512k chunks`
iostat
fluctúa enormemente y normalmente tiene un %iowait alto. Si estoy leyendo esto correctamente, parece indicar que md0 (sdb+sdc) tiene la carga más grande. ¿Pero es un cuello de botella? Después de todo, %util no se acerca a 100.
# iostat -xm 5
avg-cpu: %user %nice %system %iowait %steal %idle
7.85 0.00 35.18 50.02 0.00 6.96
Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 106.20 57.20 0.89 0.22 3.20 0.00 2.93 0.00 136.87 216.02 26.82 8.56 3.99 0.92 14.96
sde 551.20 0.00 153.80 0.00 65.80 0.00 10.66 0.00 6.75 0.00 3.44 285.73 0.00 0.64 35.52
sdd 571.60 0.00 153.77 0.00 45.80 0.00 7.42 0.00 6.45 0.00 3.40 275.48 0.00 0.63 35.98
sdc 486.60 0.00 208.93 0.00 305.40 0.00 38.56 0.00 20.60 0.00 9.78 439.67 0.00 1.01 49.10
sdb 518.60 0.00 214.49 0.00 291.60 0.00 35.99 0.00 81.25 0.00 41.88 423.52 0.00 0.92 47.88
sdf 567.40 0.00 178.34 0.00 133.60 0.00 19.06 0.00 17.55 0.00 9.68 321.86 0.00 0.28 16.08
sdg 572.00 0.00 178.55 0.00 133.20 0.00 18.89 0.00 17.63 0.00 9.81 319.64 0.00 0.28 16.00
dm-0 5.80 0.80 0.42 0.00 0.00 0.00 0.00 0.00 519.90 844.75 3.69 74.62 4.00 1.21 0.80
dm-1 103.20 61.40 0.40 0.24 0.00 0.00 0.00 0.00 112.66 359.15 33.68 4.00 4.00 0.96 15.86
md1 1235.20 0.00 438.93 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 363.88 0.00 0.00 0.00
md0 1652.60 0.00 603.88 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 374.18 0.00 0.00 0.00
md2 1422.60 0.00 530.31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 381.72 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
5.14 0.00 22.00 72.86 0.00 0.00
Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 34.00 37.40 0.15 0.15 5.20 0.00 13.27 0.00 934.56 871.59 64.34 4.61 4.15 0.94 6.74
sde 130.80 0.00 36.14 0.00 15.00 0.00 10.29 0.00 5.31 0.00 0.63 282.97 0.00 0.66 8.64
sdd 132.20 0.00 36.35 0.00 14.40 0.00 9.82 0.00 5.15 0.00 0.61 281.57 0.00 0.65 8.62
sdc 271.00 0.00 118.27 0.00 176.80 0.00 39.48 0.00 9.52 0.00 2.44 446.91 0.00 1.01 27.44
sdb 321.20 0.00 116.97 0.00 143.80 0.00 30.92 0.00 12.91 0.00 3.99 372.90 0.00 0.91 29.18
sdf 340.20 0.00 103.83 0.00 71.80 0.00 17.43 0.00 12.17 0.00 3.97 312.54 0.00 0.29 9.90
sdg 349.20 0.00 104.06 0.00 66.60 0.00 16.02 0.00 11.77 0.00 3.94 305.14 0.00 0.29 10.04
dm-0 0.00 0.80 0.00 0.01 0.00 0.00 0.00 0.00 0.00 1661.50 1.71 0.00 12.00 1.25 0.10
dm-1 38.80 42.20 0.15 0.16 0.00 0.00 0.00 0.00 936.60 2801.86 154.58 4.00 4.00 1.10 8.88
md1 292.60 0.00 111.79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 391.22 0.00 0.00 0.00
md0 951.80 0.00 382.39 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 411.40 0.00 0.00 0.00
md2 844.80 0.00 333.06 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 403.71 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Mientras tanto, el rendimiento del servidor es atroz. Cada pulsación de tecla a través de SSH tarda unos segundos en registrarse, el escritorio GNOME prácticamente no responde y los usuarios informan de conexiones interrumpidas. Mostraría gráficos de Cockpit pero el tiempo de inicio de sesión se agota. Limitar el ancho de banda funciona muy bien, pero me gustaría desbloquear el resto. Entonces, ¿cómo puedo identificar los cuellos de botella? ¡Me encantaría algunas sugerencias!
Respuesta1
El culpable fue sda, el disco magnético CentOS. La mayor parte de la evidencia apuntaba allí. Como alguien comentó (y parece haber eliminado), los tiempos de espera en sda, dm-0 y dm-1 parecen sospechosos. Efectivamente, dm-0 (root) y dm-1 (swap) también están en sda. Al observar el funcionamiento de iotop, el cuello de botella pareció desencadenarse por un rápido destello de actividad de Gnome seguido de kswapd (intercambio) que obstruyó las obras. Cerrar Gnome con un "init 3" supuso una mejora definitiva, pero no hay forma de que una máquina tan poderosa quede paralizada por una pantalla de inicio de sesión inactiva. SMART también informa más de 8000 sectores defectuosos en sda. Supongo que muchos de estos están en el espacio de intercambio, lo que hace que los intercambios paralicen el sistema.
Una idea era mover el intercambio a otro disco, pero reemplazar el sda parecía más práctico. Comencé una clonación de disco con CloneZilla pero estimaba 3 horas y una nueva instalación sería más rápida, así que seguí con eso. ¡Ahora el servidor está funcionando muy bien! Aquí hay una captura de pantalla que muestra más de 1300 archivos transmitidos simultáneamente a más de 8 Gbps, de manera agradable y estable. ¡Problema resuelto!