Problema: Elaborazione Sidekiq estremamente lenta dopo grandi importazioni su istanza multisite

Stiamo gestendo diversi siti Discourse con multisito sotto una singola applicazione. Recentemente, abbiamo eseguito un’importazione massiva di utenti (centinaia di migliaia di utenti su 6 siti). Dopo le importazioni, Sidekiq sta elaborando i processi in background molto lentamente. La dashboard di Sidekiq mostra un enorme arretrato e i processi vengono svuotati a una velocità molto inferiore al previsto.

Dettagli dell’ambiente:

  • La VM è stata aggiornata a 16 CPU / 16 GB di RAM.
  • Tuttavia, nell’interfaccia di Sidekiq, vediamo solo 5 thread e sembra che venga utilizzata solo una piccola parte delle risorse.
  • La coda di importazione principale (“nursingjobs” come genitore multisito) sta gestendo i processi per tutti i siti figli, ma il throughput dei processi è molto basso.
  • Metriche del server: CPU a volte all’80-90%, memoria intorno a 6,7/7,2 GB.

Stiamo cercando di:

  • Accelerare l’elaborazione dei processi Sidekiq/in background per svuotare i grandi arretrati post-importazione.
  • Garantire che Discourse utilizzi tutte le risorse disponibili (CPU/RAM).
  • Comprendere se ci sono limiti di thread/processi che necessitano di aggiustamenti.

Domande:

  1. Qual è il modo migliore per configurare Sidekiq/Discourse per un throughput elevato post-importazione?
  2. Quali sono le impostazioni consigliate per UNICORN_SIDEKIQS e DISCOURSE_SIDEKIQ_WORKERS su sistemi multi-core di grandi dimensioni?
  3. Ci sono impostazioni di Postgres o altre impostazioni di app.yml che dovremmo modificare per evitare errori nel pool del database quando si aumenta la concorrenza di Sidekiq?
  4. Ci sono best practice per svuotare rapidamente e in sicurezza enormi arretrati di Sidekiq dopo le importazioni?

Statistiche/screenshot di Sidekiq disponibili se utili!

La risposta a tutte queste domande è, più o meno, aumentare DISCOURSE_SIDEKIQ_WORKERS.

Potresti aumentarlo a circa 32, dato che sai di avere molta CPU disponibile. Se hai ancora molta CPU disponibile dopo che è stato in funzione per un po’, sentiti libero di aumentarlo ulteriormente.

Potresti probabilmente riportarlo a, diciamo, 8 o 12 per il funzionamento normale.

Assicurati di avere abbastanza max_connections per postgres. Probabilmente l’hai già aumentato dato che stai eseguendo multisite, ma tienilo sotto controllo.

2 Mi Piace

Grazie @supermathie ora funziona.
Ho aggiornato la configurazione a quanto segue

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

E ho aumentato la CPU a

8vCPU
16GB Memory
1 Mi Piace