Intentando solucionar el cuello de botella de I/O Wait

Versión resumida:

  • El sistema se vio reducido a la impotencia durante unos minutos debido a iowait bajo una carga moderada
  • No se estaba produciendo una actividad significativa de E/S del disco en ese momento
  • DigitalOcean asegura que no hubo actividad inusual en el hipervisor

Versión completa:
Actualmente se ejecuta en un droplet de 8 núcleos/16 GB en DigitalOcean, recientemente actualizado desde el de 4/8 para anticipar un tráfico más pesado a corto plazo.

En ese momento, el sistema tenía db_shared_buffers configurado en 2 GB y los trabajadores de unicorn en 8. Desde entonces, he aumentado ambos valores.

Publicaciones intensas en un solo tema durante un evento en vivo de aproximadamente 2 horas, con un total de unos 200 usuarios en ese período, promediando alrededor de 70 en cualquier momento según Analytics.

El sistema fue estable durante más de una hora. Las cargas promedio se mantuvieron alrededor de 4, la CPU en aproximadamente el 30% y la memoria alrededor del 35%. No hubo actividad significativa del disco ni problemas en el foro.

De repente, el número de usuarios según Analytics se duplicó. No sé si eran usuarios reales o algún artefacto de otro problema. No somos una comunidad grande o notable. Nadie nos enlaza, y sería muy inusual ganar de repente una gran cantidad de nuevos usuarios.

Al mismo tiempo, iowait se puso muy rojo con advertencias sostenidas superiores al 50%. Las cargas promedio de 1 minuto alcanzaron un pico de 12 y las de 5 minutos superaron 8. Todo el sistema se volvió muy poco responsivo, el foro se ralentizó hasta casi detenerse y hubo muchas desconexiones temporales por alta carga. La CPU nunca superó el 40%.

Esto duró de 3 a 4 minutos, luego todo volvió gradualmente a la normalidad en los siguientes 10 minutos. Según los gráficos de DigitalOcean, la E/S del disco se mantuvo por debajo de 1 MB/s durante todo el tiempo, mayormente escrituras.

¿Es posible que esto sea un problema del foro o de la configuración? ¿Está DigitalOcean mintiendo y en realidad es un problema de hardware? Si es lo primero, ¿alguna sugerencia para evitar que vuelva a ocurrir (esta no fue la primera vez)?

Tengo otro evento de tráfico pesado único y más grande próximamente que será muy importante para la comunidad. No tengo el lujo de probar por ensayo y error para ver qué funciona. Solo tengo una oportunidad para hacerlo bien (o mal).

No estoy seguro de si esto está relacionado con tu problema, pero recientemente ha habido mucho debate sobre los eventos en vivo y los picos de actividad que provocan.