Tentando solucionar gargalo de I/O Wait

Versão resumida:

  • O sistema ficou à beira do colapso por alguns minutos devido ao iowait sob carga moderada
  • Não havia atividade significativa de I/O de disco no momento
  • A DigitalOcean garante que não houve atividade incomum no hipervisor

Versão completa:
Atualmente rodando em um droplet de 8 núcleos/16 GB na DigitalOcean, recentemente atualizado de 4/8 para suportar tráfego mais intenso previsto a curto prazo.

No momento do incidente, o db_shared_buffers estava configurado em 2 GB e os workers do Unicorn em 8. Desde então, aumentei ambos.

Houve postagens intensas em um único tópico durante um evento ao vivo de aproximadamente 2 horas, com cerca de 200 usuários totais nesse período, com uma média de 70 usuários simultâneos, conforme indicado pelo Analytics.

O sistema permaneceu estável por mais de uma hora. As médias de carga permaneceram em torno de 4, a CPU em cerca de 30% e a memória em torno de 35%. Não houve atividade significativa de disco nem problemas no fórum.

De repente, o número de usuários pelo Analytics dobrou. Não sei se eram usuários reais ou algum artefato de outro problema. Não somos uma comunidade grande ou notável. Ninguém faz links para nós, e seria muito incomum ganhar repentinamente muitos novos usuários.

Ao mesmo tempo, o iowait ficou muito crítico, com avisos sustentados acima de 50%. A média de carga de 1 minuto disparou para 12, e a de 5 minutos ultrapassou 8. Todo o sistema tornou-se muito lento, o fórum parou quase completamente e houve muitos logouts temporários devido à alta carga. A CPU nunca ultrapassou 40%.

Isso durou de 3 a 4 minutos, e tudo voltou ao normal gradualmente nos 10 minutos seguintes. O I/O de disco permaneceu abaixo de 1 MB/s durante todo o período, conforme os gráficos da DigitalOcean, sendo a maior parte escrita.

É possível que isso seja um problema do fórum ou de configuração? A DigitalOcean está mentindo e, na verdade, se trata de um problema de hardware? Se for o primeiro caso, há alguma sugestão para evitar que isso aconteça novamente (este não foi o primeiro incidente)?

Tenho outro evento de tráfego intenso, único e de grande porte, acontecendo em breve, que será muito importante para a comunidade. Não tenho o luxo de tentar e errar para ver o que funciona. Tenho apenas uma chance de acertar (ou errar).

Não tenho certeza se isso está relacionado ao seu problema, mas recentemente tem havido muita discussão sobre eventos ao vivo e os picos de atividade que eles causam.