Estamos executando vários sites do Discourse com multisite sob um único aplicativo. Recentemente, fizemos um lote de grandes importações de usuários (centenas de milhares de usuários em 6 sites). Após as importações, o Sidekiq está processando trabalhos em segundo plano muito lentamente. O painel do Sidekiq mostra uma enorme fila de espera, e os trabalhos estão sendo liberados a uma taxa muito mais lenta do que o esperado.
Detalhes do ambiente:
- A VM foi atualizada para 16 CPUs / 16 GB de RAM.
- No entanto, na interface do Sidekiq, vemos apenas 5 threads e parece que apenas uma pequena parte dos recursos está sendo utilizada.
- A fila de importação principal (“nursingjobs” como pai multisite) está lidando com trabalhos de todos os sites filhos, mas a taxa de transferência de trabalhos é muito baixa.
- Métricas do servidor: CPU às vezes em 80-90%, memória em torno de 6,7/7,2 GB.
Estamos buscando:
- Acelerar o processamento de trabalhos em segundo plano/Sidekiq para limpar grandes filas de espera pós-importação.
- Garantir que o Discourse esteja utilizando todos os recursos disponíveis (CPU/RAM).
- Entender se existem limites de threads/processos que precisam ser ajustados.
Perguntas:
- Qual é a melhor maneira de configurar o Sidekiq/Discourse para alta taxa de transferência pós-importação?
- Quais são as configurações recomendadas para UNICORN_SIDEKIQS e DISCOURSE_SIDEKIQ_WORKERS em sistemas grandes com múltiplos núcleos?
- Existem configurações do Postgres ou outras configurações do app.yml que devemos ajustar para evitar erros de pool de banco de dados ao aumentar a concorrência do Sidekiq?
- Alguma prática recomendada para limpar grandes filas de espera do Sidekiq rapidamente e com segurança após as importações?
Estatísticas/capturas de tela do Sidekiq disponíveis, se úteis!
