Tuning der Sidekiq Warteschlangen

Es gibt mehrere Möglichkeiten Mastodon Sidekiq zu erweitern.

  • erhöhen der Threads für alle Warteschlangen
  • aufteilen auf verschiedene Warteschlangen
    • mehrere Warteschlangen zusammenfassen
    • jede Warteschlange einzeln ansteuern

Ein Sidekiq-Prozess für alle Warteschlangen (Standard)

Diese Methode ist die einfachste, dabei müsst ihr die /etc/systemd/system/mastodon-sidekiq.service nur an zwei Stellen anpassen:

Environment="DB_POOL=FOO"
...
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -q default -c FOO

Die zwei FOO müssen durch die Anzahl der Threads ersetzt werden, standardmäßig sind hier 25 ausgewählt.

Wichtig: Vergewissere dich, dass dein PostgreSQL-Server genügend Datenbankverbindungen zulässt.

Es muss eine für jeden der Sidekiq-Threads + Puma-Threads geben. Es ist ratsam, https://<yourserver.tld>/pghero/connections zu überprüfen und die aktuelle Anzahl der Verbindungen mit der maximalen Anzahl der Verbindungen in der PostgreSQL-Konfiguration zu vergleichen.

Die PostgreSQL-Konfiguration findet ihr unter /etc/postgresql/15/main/postgresql.conf(versionsnummer im Pfad beachten) unter der Variable max_connections
Für mehr Informationen zu PostgreSQL, schaut euch bitte die Dokumentation an.

Mehrere Sidekiq-Prozesse für die Warteschlangen

Wichtig: Die scheduler-Warteschlange darf niemals mehrfach ausgeführt werden!!

Die Beschreibung der einzelnen Warteschlangen findet ihr in der Mastodon Dokumentation.

Es gibt auch die Möglichkeit, die Warteschlangen auf mehrere Prozesse aufzuteilen. Dazu kopiert ihr am besten die mastodon-sidekiq.service und passt die entsprechenden Variablen an.

cp /etc/systemd/system/mastodon-sidekiq.service /etc/systemd/system/mastodon-sidekiq-two.service

und passt in der xxx Folgendes an:

ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -q default -q push -q mailer -q pull -q ingress -c 25

Damit habt ihr für alle Warteschlangen, außer die scheduler-Warteschlange, einen zweiten Prozess erstellt.

ladet die neue config mit:

systemctl daemon-reload

und aktiviert sie mit:

systemctl enable --now mastodon-sidekiq-two.service

Ein Sidekiq-Prozess für jede einzelne Warteschlange

Nach dem obigen Vorgehen könnt ihr auch jede Warteschlange einen eigenen Prozess zuweisen:

Am einfachsten kopiert ihr die mastodon-sidekiq.service dafür mehrere male und benennt sie folgendermaßen:

  • mastodon-sidekiq-default.service
  • mastodon-sidekiq-mailers.service
  • mastodon-sidekiq-pushpull.service
  • mastodon-sidekiq-scheduler.service
  • mastodon-sidekiq-ingress.service

Dann passt ihr wie oben jede Einzelne entsprechend an, z.B. für die mastodon-sidekiq-mailers.service:

Description=mastodon-sidekiq-mailers
...
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -q mailer -c 25

ladet die neue config mit:

systemctl daemon-reload

deaktiviert die mastodon-sidekiq.service sie mit:

systemctl disable --now mastodon-sidekiq.service

und aktiviert alle eben Erstellten mit:

systemctl enable --now mastodon-sidekiq-default.service
systemctl enable --now mastodon-sidekiq-mailers.service
systemctl enable --now mastodon-sidekiq-pushpull.service
systemctl enable --now mastodon-sidekiq-scheduler.service
systemctl enable --now mastodon-sidekiq-ingress.service

Mehrere Prozesse für eine Warteschlange

In der Mastodon-Dokumentation wird das zwar nicht erwähnt, aber du kannst auch mehrere Prozesse für eine einzige Warteschlange laufen lassen.

Dafür erstellst du nach obigen Schema einfach mehrere Servicedateien z.B.:

  • mastodon-sidekiq-ingress-1.service
  • mastodon-sidekiq-ingress-2.service
  • mastodon-sidekiq-ingress-3.service
  • mastodon-sidekiq-ingress-4.service

Alle diese Kopien werden dann parallel gestartet und arbeiten an der gleichen Warteschlange.