Problema: Procesamiento de Sidekiq muy lento después de importaciones grandes en una instancia multisite

Estamos ejecutando varios sitios de Discourse con multisite bajo una sola aplicación. Recientemente, realizamos una importación masiva de usuarios (cientos de miles en 6 sitios). Después de las importaciones, Sidekiq procesa los trabajos en segundo plano muy lentamente. El panel de Sidekiq muestra una gran acumulación, y los trabajos se están limpiando mucho más lentamente de lo esperado.

Detalles del entorno:

  • La VM fue actualizada a 16 CPUs / 16GB de RAM.
  • Sin embargo, en la interfaz de Sidekiq, solo se ven 5 hilos y parece que solo una pequeña porción de los recursos se están usando.
  • La cola principal de importación (“nursingjobs” como padre de multisite) maneja trabajos para todos los sitios hijos, pero el rendimiento de los trabajos es muy bajo.
  • Métricas del servidor: CPU a veces al 80-90%, memoria alrededor de 6.7/7.2GB.

Queremos:

  • Acelerar el procesamiento de trabajos en segundo plano de Sidekiq para limpiar grandes acumulaciones después de la importación.
  • Asegurar que Discourse aproveche todos los recursos disponibles (CPU/RAM).
  • Entender si existen límites de hilos/procesos que necesiten ajuste.

Preguntas:

  1. ¿Cuál es la mejor forma de configurar Sidekiq/Discourse para un alto rendimiento después de la importación?
  2. ¿Cuáles son las configuraciones recomendadas para UNICORN_SIDEKIQS y DISCOURSE_SIDEKIQ_WORKERS en sistemas grandes con múltiples núcleos?
  3. ¿Hay ajustes en Postgres u otro app.yml que debamos modificar para evitar errores en el pool de la base de datos al aumentar la concurrencia de Sidekiq?
  4. ¿Cuáles son las mejores prácticas para limpiar rápidamente y de forma segura grandes acumulaciones en Sidekiq después de las importaciones?

¡Las estadísticas/hacer capturas de pantalla de Sidekiq están disponibles si son útiles!|690x212](upload://a0D2vFQCoDJJYTD4MUQm9kiTuHz.jpeg)

La respuesta a todas esas preguntas es, más o menos, aumentar DISCOURSE_SIDEKIQ_WORKERS.

Yo lo aumentaría hasta quizás 32, ya que sabes que tienes mucho CPU disponible. Si todavía tienes mucha CPU disponible después de que eso haya estado funcionando durante un tiempo, siéntete libre de aumentarlo más.

Probablemente puedas reducirlo a, digamos, 8 o 12 para un funcionamiento normal.

Asegúrate de tener suficientes max_connections para postgres. Probablemente ya lo hayas aumentado, ya que estás ejecutando multisite, pero mantén un ojo en ello.

2 Me gusta

Gracias @supermathie, ahora está funcionando.
Actualicé la configuración a lo siguiente:

  UNICORN_WORKERS: 8
  UNICORN_SIDEKIQS: 7
  DISCOURSE_SIDEKIQ_WORKERS: 10
  DISCOURSE_DB_POOL: 20

Y aumenté la CPU a:

8vCPU
16 GB de memoria
1 me gusta