# Tuning der Sidekiq Warteschlangen

**URL:** <https://forum.fedimins.net/t/tuning-der-sidekiq-warteschlangen/71>\
**Category:** Technical\
**Tags:** mastodon, tutorial\
**Created:** [14. Mai 2023 um 15:42 UTC](https://forum.fedimins.net/t/tuning-der-sidekiq-warteschlangen/71 "2023-05-14T15:42:01Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tealk](https://forum.fedimins.net/user_avatar/forum.fedimins.net/tealk/32/5_2.png) [@Tealk](https://forum.fedimins.net/u/Tealk)\
**Post date:** [14. Mai 2023 um 15:42 UTC](https://forum.fedimins.net/t/tuning-der-sidekiq-warteschlangen/71/1 "2023-05-14T15:42:01Z")

</div>

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:

```bash
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](https://www.postgresql.org/docs/current/runtime-config-connection.html) 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](https://docs.joinmastodon.org/admin/scaling/#sidekiq-queues).

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.

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

```

und passt in der xxx Folgendes an:

```bash
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:

```bash
systemctl daemon-reload

```

und aktiviert sie mit:

```bash
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`:

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

```

ladet die neue config mit:

```bash
systemctl daemon-reload

```

deaktiviert die mastodon-sidekiq.service sie mit:

```bash
systemctl disable --now mastodon-sidekiq.service

```

und aktiviert alle eben Erstellten mit:

```bash
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.
