Shopware Performance und Serverkonfiguration prüfen
Eine gezielte Shopware Performance Optimierung beginnt mit der Serverkonfiguration und den Hintergrundprozessen. Diese Anleitung zeigt, wie sich die Performance von Shopware 6 systematisch prüfen und optimieren lässt – von PHP und OPcache über Admin Worker, Message Queue und Cronjobs bis zu Redis, Datenbank, Suche und Indexierung.
Alle beschriebenen Punkte lassen sich direkt über Shopware-Konfiguration, Kommandozeile, PHP und Hosting prüfen. Die Anleitung setzt keine bestimmte Erweiterung voraus.
Shopware reagiert langsam, Hintergrundprozesse benötigen lange oder Serverressourcen werden unnötig stark beansprucht.
Shopware Performance systematisch verbessern, unnötige Last reduzieren und Hintergrundprozesse zuverlässig ausführen.
Nicht jede Optimierung ist für jeden Shop sinnvoll. Shopgröße, Hosting, Sortiment und eingesetzte Funktionen sind entscheidend.
Inhaltsverzeichnis
- Typische Shopware-Performance-Engpässe
- Performance-Optimierungen richtig einordnen
- Admin Worker durch CLI-Worker ersetzen
- APP_URL prüfen
- MailVariables-Updates bewerten
- Increment Storage prüfen
- Logging reduzieren
- E-Mails über die Queue senden
- PHP und OPcache optimieren
- Queue-Speicher auswählen
- Symfony Secrets bewerten
- Elasticsearch oder OpenSearch
- Product Stream Indexing
- Sichere Umsetzungsreihenfolge
- Abschlusskontrolle
Shopware Performance optimieren: Wo entstehen die häufigsten Engpässe?
Eine erfolgreiche Shopware Performance Optimierung beginnt nicht mit einzelnen Tuning-Werten, sondern mit der Frage, welcher Bereich den Shop tatsächlich ausbremst. In Shopware 6 entstehen Performanceprobleme häufig nicht an einer einzigen Stelle, sondern durch das Zusammenspiel von PHP, Datenbank, Cache, Hintergrundprozessen und Serverkonfiguration.
Besonders häufig sollten zunächst PHP und OPcache, Message Queue und Worker, Scheduled Tasks und Cronjobs sowie Datenbank- und Cache-Systeme geprüft werden. Bei größeren Shops kommen Produktsuche, Indexierung, Redis oder externe Message Broker hinzu.
| Bereich | Typisches Problem | Mögliche Auswirkung |
|---|---|---|
| PHP / OPcache | Unpassende PHP-Werte oder falsche PHP-Version | Langsame Requests und unnötig hohe CPU-Last |
| Message Queue / Worker | Worker fehlen oder Nachrichten stauen sich | Verzögerte Prozesse und steigende Queue-Länge |
| Cronjobs / Scheduled Tasks | Automatische Prozesse laufen nicht zuverlässig | Indexierung, Wartungsaufgaben und Hintergrundjobs bleiben liegen |
| Datenbank / Redis | Zu viele Schreibzugriffe oder ungeeignete Speicherstrategie | Hohe Datenbanklast und langsamere Administration |
| Suche / Indexierung | Große Sortimente oder aufwendige dynamische Produktgruppen | Hohe Last bei Änderungen und Reindexierung |
Eine vermeintliche Shopware-Performance-Optimierung bringt wenig, wenn der tatsächliche Engpass an anderer Stelle liegt. Deshalb sollten Antwortzeiten, Serverlast, Queue-Länge und Logs vor und nach jeder Änderung verglichen werden.
1. Shopware Performance-Optimierungen richtig einordnen
Nicht jede mögliche Optimierung ist für jeden Shop sinnvoll. Einige Einstellungen verbessern nahezu jeden produktiven Shopware-Shop, andere lohnen sich erst bei hoher Last, großen Sortimenten oder zusätzlicher Infrastruktur.
| Prüfpunkt | Einordnung | Priorität |
|---|---|---|
| Admin Worker | Für Produktivsysteme durch CLI-Worker ersetzen | Hoch |
| BusinessEventHandler Logging auf DEBUG | Im Liveshop mindestens auf WARNING reduzieren | Hoch |
| PHP zend.assertions | Produktivwert prüfen | Hoch |
| OPcache und Realpath Cache | PHP-Laufzeit optimieren | Mittel bis hoch |
| E-Mails über Message Queue | Sinnvoll, wenn die Queue zuverlässig läuft | Mittel |
| Redis oder RabbitMQ | Vor allem bei größerer Queue oder mehreren Workern | Abhängig von Last |
| Elasticsearch oder OpenSearch | Nicht für jeden kleinen Shop erforderlich | Abhängig vom Sortiment |
| Product Stream Indexing | Nur nach Prüfung dynamischer Produktgruppen deaktivieren | Abhängig von Nutzung |
Änderungen an Queue, Redis, PHP und Indexierung beeinflussen mehrere Prozesse. Jede Maßnahme einzeln umsetzen, Cache leeren, Worker neu starten und danach Shop sowie Logs prüfen.
2. Admin Worker durch CLI-Worker ersetzen
Der Admin Worker verarbeitet Nachrichten nur, wenn die Shopware-Administration geöffnet ist. Auf einem Produktivsystem sollten Message Queue und Scheduled Tasks unabhängig von angemeldeten Benutzern laufen.
Admin Worker deaktivieren
shopware:
admin_worker:
enable_admin_worker: false
Message Queue starten
/usr/bin/php bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512M
Scheduled Tasks starten
/usr/bin/php bin/console scheduled-task:run --time-limit=60
Laufen Queue und Scheduled Tasks nicht serverseitig, bleiben nach der Deaktivierung Hintergrundaufgaben vollständig liegen.
Ausführliche Anleitungen: Shopware Message Queue hängt und Shopware Cronjobs prüfen .
3. APP_URL und externe Prüfung kontrollieren
Shopware prüft beim Laden der Administration, ob die in der Konfiguration hinterlegte APP_URL von außen erreichbar ist. Diese URL wird auch von externen Apps verwendet.
APP_URL prüfen
APP_URL="https://www.beispiel-shop.de"
- HTTPS und Domain sind korrekt.
- Die URL ist von außen erreichbar.
- Es entsteht keine unerwartete Weiterleitung.
- Apps funktionieren mit dieser Domain.
- Staging- und Livesystem verwenden unterschiedliche korrekte Werte.
Externe Prüfung nur bei korrekter APP_URL deaktivieren
APP_URL_CHECK_DISABLED=1
Ist die APP_URL falsch oder intern nicht erreichbar, können Shopware-Apps und externe Dienste weiterhin fehlschlagen.
4. Automatische MailVariables-Updates bewerten
Shopware kann verfügbare Variablen für E-Mail-Vorlagen automatisch aktualisieren. Auf produktiven Systemen erzeugt diese Prüfung zusätzliche Arbeit und kann deaktiviert werden, wenn Vorlagen kontrolliert gepflegt und bei Änderungen bewusst aktualisiert werden.
Ob diese Funktion deaktiviert werden sollte, hängt von Shopware-Version, verwendeten Vorlagen und Deployment-Prozess ab. Vor einer Änderung bestehende Mailvorlagen und Testversand sichern.
5. Increment Storage aus der Datenbank auslagern
Der Increment Storage speichert Zähler und Fortschrittsstände, die unter anderem in der Administration angezeigt werden. Bei hoher Aktivität erzeugt die Speicherung in MySQL zusätzliche Schreibzugriffe.
| Speicher | Geeignet für | Hinweis |
|---|---|---|
| MySQL | Kleine und einfache Installationen | Keine zusätzliche Infrastruktur erforderlich |
| Array | Flüchtige Werte innerhalb eines Prozesses | Nicht prozessübergreifend dauerhaft |
| Redis | Produktivsysteme mit vorhandener Redis-Infrastruktur | Schneller gemeinsamer Speicher für mehrere Prozesse |
Redis muss überwacht, erreichbar und passend konfiguriert sein. Eine unzuverlässige Redis-Verbindung verschiebt das Problem lediglich auf einen zusätzlichen Dienst.
6. BusinessEventHandler-Logging reduzieren
Ein produktiver Shop sollte nicht dauerhaft mit ausführlichem DEBUG-Logging betrieben werden. Umfangreiche Protokollierung erhöht Schreibzugriffe, Logvolumen und Auswertungsaufwand.
- APP_ENV steht auf prod.
- Log-Level ist mindestens WARNING, sofern keine gezielte Fehlersuche läuft.
- Temporäres DEBUG-Logging wird nach der Diagnose zurückgesetzt.
- Logrotation und verfügbarer Speicherplatz sind eingerichtet.
APP_ENV=prod
Debug-Ausgaben können sehr große Logdateien erzeugen und sensible technische Informationen sichtbar machen.
7. E-Mails über die Message Queue senden
Shopware versendet E-Mails standardmäßig synchron. Die Übergabe an die Message Queue kann Antwortzeiten verbessern, weil die eigentliche Zustellung im Hintergrund erfolgt.
framework:
mailer:
message_bus: 'messenger.default_bus'
Läuft die Message Queue nicht dauerhaft, werden Bestell- und Statusmails verspätet oder gar nicht versendet.
Weitere Prüfung: Shopware-Bestellmails werden nicht versendet .
8. PHP und OPcache für Shopware Performance optimieren
PHP hat direkten Einfluss auf die Shopware Performance. Die relevanten Werte müssen in der tatsächlich verwendeten PHP-FPM-Konfiguration gesetzt werden. CLI und Webserver können unterschiedliche php.ini-Dateien laden.
| PHP-Wert | Typische Produktionsempfehlung | Wirkung |
|---|---|---|
| zend.assertions | -1 | Assertions werden im Produktivbetrieb nicht erzeugt |
| opcache.enable_file_override | 1 | Optimiert bestimmte Dateioperationen über OPcache |
| opcache.interned_strings_buffer | Mindestens 20 MB als Ausgangswert | Mehr Speicher für wiederkehrende Zeichenketten |
| realpath_cache_ttl | Mindestens 3600 Sekunden als Ausgangswert | Dateipfade müssen seltener neu aufgelöst werden |
| zend.detect_unicode | 0, falls die Option noch vorhanden ist | Veraltete Einstellung ohne Nutzen im Produktivbetrieb |
Aktuelle Werte anzeigen
/usr/bin/php -r "
foreach ([
'zend.assertions',
'opcache.enable_file_override',
'opcache.interned_strings_buffer',
'realpath_cache_ttl',
'zend.detect_unicode'
] as $key) {
echo $key, ' = ', ini_get($key), PHP_EOL;
}
"
Einzelne ältere PHP-Direktiven können in aktuellen PHP-Versionen entfernt oder wirkungslos sein. Maßgeblich sind PHP-Version, geladene Konfiguration und tatsächliche Ausgabe.
Ausführliche Anleitung: Shopware PHP-Version prüfen .
9. Datenbank-Queue, Redis und RabbitMQ vergleichen
Shopware verwendet standardmäßig den Doctrine-Transport und speichert Queue-Nachrichten in der Datenbank. Das ist einfach, skaliert aber bei vielen Nachrichten und mehreren parallelen Workern schlechter als ein spezialisierter Broker.
| Transport | Geeignet für | Bewertung |
|---|---|---|
| Doctrine / Datenbank | Kleine bis mittlere Shops mit begrenzter Queue-Last | Einfach, aber zusätzliche Datenbanklast |
| Redis | Vorhandene Redis-Infrastruktur und höhere Queue-Last | Schnell, benötigt stabilen externen Dienst |
| RabbitMQ | Viele Nachrichten, mehrere Worker und komplexere Infrastruktur | Spezialisierter Message Broker mit höherem Betriebsaufwand |
Ein kleiner Shop mit wenigen Nachrichten benötigt nicht zwingend RabbitMQ. Entscheidend sind Queue-Wachstum, Worker-Anzahl, Datenbanklast und gemessene Engpässe.
10. Symfony Secrets nur bei Nichtverwendung deaktivieren
Symfony Secrets verschlüsselt Umgebungswerte und entschlüsselt sie beim Start der Anwendung. Wird diese Funktion nicht verwendet, kann sie deaktiviert werden, um geringe zusätzliche Arbeit beim Booten zu sparen.
framework:
secrets:
enabled: false
Werden Secrets tatsächlich eingesetzt, darf die Funktion nicht deaktiviert werden. Der Performancegewinn ist gering und rechtfertigt keinen Ausfall verschlüsselter Konfigurationen.
11. Elasticsearch oder OpenSearch bei großen Shopware-Shops prüfen
Eine externe Suchmaschine kann bei großen Sortimenten, komplexer Suche und hoher Last deutliche Vorteile bieten. Für kleine Shops ist sie jedoch keine zwingende Voraussetzung und erhöht Betriebsaufwand, Überwachung und Speicherbedarf.
- Produktanzahl und Suchlast messen
- Funktionsumfang der Shopware-Edition prüfen
- Kompatible Elasticsearch- oder OpenSearch-Version wählen
- Indexierung und Queue-Verarbeitung einrichten
- Ausfallverhalten und Monitoring planen
- Suche nach dem Aufbau fachlich testen
Bei einem kleinen Shop ist Elasticsearch oder OpenSearch häufig nicht erforderlich. Die externe Suche ist eine mögliche Ausbaustufe, kein genereller Pflichtbestandteil.
12. Product Stream Indexing bewusst deaktivieren
Der Product Stream Indexer ordnet Produkte dynamischen Produktgruppen zu und ermittelt, welche Kategorieseiten bei Produktänderungen betroffen sind. Bei großen Sortimenten oder häufigen Produktupdates kann dieser Prozess viel Last erzeugen.
shopware:
product_stream:
indexing: false
Nach der Deaktivierung werden betroffene Kategorieseiten bei Produktänderungen nicht sofort neu invalidiert. Außerdem kann die Regel „Position in dynamischer Produktgruppe“ bei Warenkorbpositionen nicht wie zuvor ausgewertet werden.
Diese Optimierung eignet sich nur, wenn dynamische Produktgruppen, Cache-Laufzeiten und betroffene Regeln vorher geprüft wurden.
13. Sichere Reihenfolge für die Shopware Performance Optimierung
- Vollständiges Backup erstellen.
- Aktuelle Shopware-, PHP- und Plugin-Version dokumentieren.
- Aktuelle Serverkonfiguration und Ausgangswerte dokumentieren.
- CLI-Worker und Scheduled Tasks zuverlässig einrichten.
- Admin Worker deaktivieren.
- Logging und APP_URL prüfen.
- PHP-Werte mit dem Hoster anpassen.
- E-Mail-Queue erst nach stabilem Worker aktivieren.
- Redis oder RabbitMQ nur nach Lastanalyse einführen.
- Product Stream Indexing nur nach Funktionsprüfung deaktivieren.
- Cache leeren und PHP-FPM kontrolliert neu laden.
- Storefront, Administration, Checkout und Logs prüfen.
/usr/bin/php bin/console cache:clear
/usr/bin/php bin/console cache:warmup
Nach jeder Maßnahme Antwortzeiten, Serverlast, Queue-Länge und Logs vergleichen. Nur dadurch ist erkennbar, welche Shopware-Performance-Optimierung im konkreten Shop tatsächlich einen Vorteil bringt.
14. Abschlusskontrolle nach der Performance-Optimierung
- Backup und Rückweg sind vorhanden.
- Admin Worker wurde erst nach CLI-Worker-Test deaktiviert.
- Message Queue und Scheduled Tasks laufen automatisch.
- APP_URL ist korrekt und von außen erreichbar.
- Produktivsystem läuft nicht dauerhaft mit DEBUG-Logging.
- E-Mail-Queue wurde mit Testbestellungen geprüft.
- Web-PHP und CLI-PHP verwenden passende Werte.
- OPcache und Realpath Cache sind aktiv und passend dimensioniert.
- Queue-Transport passt zur tatsächlichen Last.
- Redis oder RabbitMQ wird überwacht.
- Elasticsearch oder OpenSearch wurde nur bei Bedarf eingerichtet.
- Product Stream Indexing wurde funktional bewertet.
- Cache wurde neu aufgebaut.
- Storefront, Administration und Checkout funktionieren.
- Shopware- und Server-Logs bleiben unauffällig.
Die Optimierung ist abgeschlossen, wenn Hintergrundprozesse stabil laufen, keine Geschäftsprozesse beeinträchtigt werden und Verbesserungen anhand von Messwerten nachvollziehbar sind.
Häufige Fragen zur Shopware Performance
Was bringt eine Shopware Performance Optimierung?
Ziel ist nicht nur eine schnellere Storefront. Auch Administration, Queue-Verarbeitung, Indexierung und Serverauslastung können verbessert werden. Entscheidend ist, zunächst den tatsächlichen Engpass zu identifizieren.
Müssen alle genannten Optimierungen umgesetzt werden?
Nein. Redis, RabbitMQ, Elasticsearch und eine deaktivierte Product-Stream-Indexierung sind nicht für jeden Shop erforderlich. Entscheidend sind Last, Sortiment, Infrastruktur und tatsächlich gemessene Engpässe.
Sollte der Admin Worker in jedem Liveshop deaktiviert werden?
Für einen stabilen Produktivbetrieb ist ein serverseitiger CLI-Worker vorzuziehen. Der Admin Worker darf aber erst abgeschaltet werden, nachdem Queue und Scheduled Tasks zuverlässig laufen.
Ist die Datenbank-Queue grundsätzlich falsch?
Nein. Sie ist einfach und für kleinere Installationen oft ausreichend. Bei hoher Last und mehreren Workern kann ein externer Broker besser skalieren.
Braucht jeder Shop Elasticsearch oder OpenSearch?
Nein. Der Nutzen hängt von Produktmenge, Suchanforderungen, Edition und Serverinfrastruktur ab.
Kann ich E-Mails ohne Weiteres über die Queue senden?
Nur wenn der Queue-Worker dauerhaft überwacht läuft. Andernfalls werden wichtige Kunden- und Bestellmails verzögert.
Warum ändern sich PHP-Werte trotz Anpassung nicht?
Webserver, PHP-FPM, CLI und Cronjobs können unterschiedliche Konfigurationsdateien verwenden. Die tatsächlich geladene php.ini muss für jeden Bereich separat geprüft werden.
Verwandte Shopware-Anleitungen
Shopware Performance und Serverkonfiguration prüfen lassen
Ich prüfe Worker, Queue, PHP, OPcache, Redis, Logging, Indexierung und Serverkonfiguration direkt in der bestehenden Shopware-Installation und grenze Performance-Engpässe gezielt ein.
Technische Prüfung anfragen