Wir betreiben mehrere Discourse-Sites mit Multisite unter einer einzigen App. Kürzlich haben wir eine Charge großer Benutzerimporte durchgeführt (Hunderttausende von Benutzern über 6 Sites). Nach den Importen verarbeitet Sidekiq Hintergrundjobs sehr langsam. Das Sidekiq-Dashboard zeigt einen riesigen Rückstand an, und Jobs werden viel langsamer abgearbeitet als erwartet.
Umgebungsdetails:
- Die VM wurde auf 16 CPUs / 16 GB RAM aufgerüstet.
- In der Sidekiq-Oberfläche sehen wir jedoch nur 5 Threads, und es scheint, als würde nur ein kleiner Teil der Ressourcen genutzt.
- Die Hauptimportwarteschlange („nursingjobs“ als Multisite-Mutter) verarbeitet Jobs für alle untergeordneten Sites, aber der Jobdurchsatz ist sehr gering.
- Servermetriken: CPU manchmal bei 80–90 %, Speicher bei etwa 6,7/7,2 GB.
Wir möchten:
- Die Sidekiq/Hintergrundjob-Verarbeitung beschleunigen, um große Rückstände nach dem Import zu beseitigen.
- Sicherstellen, dass Discourse alle verfügbaren Ressourcen (CPU/RAM) nutzt.
- Verstehen, ob es Thread-/Prozesslimits gibt, die angepasst werden müssen.
Fragen:
- Was ist der beste Weg, Sidekiq/Discourse für hohen Durchsatz nach dem Import zu konfigurieren?
- Was sind die empfohlenen Einstellungen für UNICORN_SIDEKIQS und DISCOURSE_SIDEKIQ_WORKERS auf großen Mehrkernsystemen?
- Gibt es Postgres- oder andere app.yml-Einstellungen, die wir anpassen sollten, um DB-Poolfehler zu vermeiden, wenn die Sidekiq-Concurrency erhöht wird?
- Gibt es Best Practices, um riesige Sidekiq-Rückstände nach Importen schnell und sicher zu beseitigen?
Sidekiq-Statistiken/Screenshots sind verfügbar, falls hilfreich!
