Performance-Trick: So deaktivierst du den Admin Worker in Shopware 6

|
Deaktiviere den Admin Worker für bessere Stabilität und Performance deiner Shopware 6 Installation

Die Performance der Website ist eine wackelige Angelegenheit. Es gibt lauter kleine Dinge, die zur Verbesserung beitragen können. Bei den vielen Anfragen, die wir zum E-Commerce-System Shopware 6 bekommen, konnten wir eine dieser oft übersehenen Stellschrauben identifizieren: Die Deaktivierung des Admin Workers führt zu einer deutlich verbesserten und stabileren Performance deines Shops. Wie das funktioniert, erkläre ich dir nachfolgend.

Wie finde ich heraus, ob ich Performance-Probleme in Shopware 6 aufgrund des Admin Workers habe?

Schau dir als erstes das "fpm-process.log" unter /tmp an. Sollte dort vermehrt die Warnung "server reached max_children setting" auftauchen, dann wirf einen Blick in das access.log unter /logs mit folgendem grep:

p123456:/logs > grep 'message-queue' access.log

Passen die Einträge grob zu den Zeiten der WARNING-Meldungen im fpm-process.log? Perfekt, dann hast du den richtigen Anhaltspunkt!

Was macht der Admin Worker in Shopware 6?

Tatsächlich existiert der Admin Worker dafür, dass Aufgaben abgearbeitet werden. Ihr müsst euch das wie folgt vorstellen:

In der Message Queue, einer Art Warteschlange, werden die Aufgaben, die in deinem Shopware 6 anfallen, asynchron nacheinander abgearbeitet. Das kann zum Beispiel das Versenden von Mails, die Generierung der Sitemap oder auch die Indexierung von Produkten sein.

Zusätzlich zu diesen Aufgaben werden auch die Scheduled Tasks über die Message Queue abgehandelt. In festen Intervallen kommen also weitere Aufgaben in die Warteschlange, wie zum Beispiel die Prüfung auf neue Updates oder der Export für ein Vergleichsportal.

Alle anfallenden Aufgaben sind durch die Message Queue nun in der Datenbank gespeichert und werden dann abgearbeitet, sobald der Admin im Backend eingeloggt ist.
 
In der Default-Einstellung von Shopware ist der sogenannte Admin Worker aktiviert. Dies ist zwar eine sehr einfache und schnelle Methode, aber nicht für den Einsatz in Produktivsystemen empfohlen, denn es entstehen erhebliche Performance-Nachteile.

Warum ist der Admin Worker schlecht für die Performance in Shopware 6?

Immer dann, wenn sich jemand im Backend von Shopware 6 einloggt und über längere Zeit dort arbeitet, werden eine Vielzahl von Aufgaben abgearbeitet. So werden durch den stark erhöhten Ressourcenverbrauch Verbindungsabbrüche und starke Performance-Schwankungen hervorgerufen. Allerdings ist es natürlich ungünstig, dass gar keine Aufgaben abgearbeitet werden, wenn kein Benutzer im Backend angemeldet ist.

Spätestens zum Livegang des Shops solltest du aber den Admin Worker deaktivieren und die Aufgaben über die Shopware CLI starten lassen. Auf diese Weise werden die Aufgaben auch abgearbeitet, wenn niemand im Backend angemeldet ist. 

Diese Umstellung kannst du natürlich auch noch durchführen, wenn dein Shop schon live ist.

Wie deaktiviere ich den Admin Worker in Shopware 6?

Für gewöhnlich ist in der Shopware 6 Installation unter config/packages eine shopware.yaml abgelegt. In seltenen Fällen existiert diese noch nicht. Benenne dann eine Datei entsprechend und füge folgenden Inhalt ein, um den Admin Worker zu deaktivieren und deine Performance zu erhöhen:

shopware:
    admin_worker:
        enable_admin_worker: false

Bei bereits vorhandenen Dateien ist entsprechend nur das “false” einzusetzen.

Damit nun auch die Message Queue und die Scheduled Tasks ausgeführt werden, muss dies über die CLI angestoßen werden. Bei mittwald musst du hierzu zwei .sh-Skripte anlegen und diese dann mithilfe von zwei Cronjobs antriggern.

Folgende Skripte legst du unter /files an: messagequeue.sh und scheduledtasks.sh und gibst diesen Ausführrechte:

p123456:/files > chmod +x messagequeue.sh scheduledtasks.sh

In der messagequeue.sh hinterlegt du folgenden Code. Ganz wichtig dabei: Der Befehl hat sich seit Shopware 6.5 geändert.

bin/console messenger:consume failed async --time-limit=60

Der ursprüngliche CLI-Command mit dem Wert "default" funktioniert nicht mehr und schlägt fehl. 

In scheduledtasks.sh hinterlegst du folgendes:

#!/bin/bash
php /html/shopware/bin/console scheduled-task:run --time-limit=295

Im Kundencenter legst du zwei benutzerdefinierte Cronjobs an, um die Skripte zu starten:

Fertig! Nun arbeitet dein Shopware 6 seine Aufgaben kontinuierlich ab und der Ressourcenverbrauch wird schonend verteilt. Dank der Deaktivierung des Admin Workers hast du deine Performance deutlich verbessert.

Noch mehr Performance für Shopware 6  

  • Nutze MySQL 8. Es sind deutliche Verbesserungen im Vergleich zu vorigen Versionen implementiert worden. Das lohnt sich aus Performance-Sicht.
  • Schau, ob die Werte in der php.ini für deinen Shop optimiert sind. Unser Kundenservice hilft dir gern dabei!
  • Aktiviere Performance Plus im mittwald Kundencenter. Damit steht dir Server-seitiges Caching mit OpCode Cache und APCu zur Verfügung.

Tipp: Hoste deine Shop-Projekte bei mittwald. Dank einfacher One-Click-Installation musst du dir dann nie wieder Gedanken um die Installation deiner E-Commerce-Systeme machen. Und Top-Performance und 100 % klimaneutrales Hosting gibt's obendrauf.

Kommentare

Jörg Rösner am
Danke für die gute Step bei Step Anleitung !
Aber Achtung: Hier ein Zitat aus der Shopware Doku:

Wichtig ist, dass sich der Befehl ab der Shopware Version 6.5 geändert hat. Der alte CLI-Command mit dem Wert "default" wird fehlschlagen.

Der hier in der Anleitung genannte...

php /html/shopware/bin/console messenger:consume default --time-limit=295

... wird daher wohl nicht mehr ab Shopware 6.5.x funktionieren, wenn ich das richtig verstehe ! (Ungetestet)
Laut Shopware Doku müsste es ab Shopware Version 6.5.x wie folgt sein:

php /bin/console messenger:consume failed async --time-limit=295


Gruß Jörg
Antworten

Kommentar hinzufügen