In diesem Beitrag findest du Tipps und technische Informationen rund um die richtige Einstellung und Konfiguration der Caches deines Shopware Systems. Diese sind als Vorschläge zu betrachten und basieren größtenteils auf bereits aufgetretenen Supportfällen und Feedback unserer Kunden. Dieser Beitrag dient als Ergänzung unserer Caching-Blogreihe sowie der offiziellen Shopware Dokumentation.
Solltest du Fragen haben, die du nicht mit diesem Leitfaden beantworten kannst, wende dich an den Support.
Inhaltsverzeichnis
Wichtige Einstellungen des OPcache
OPcache für große Shops skalieren
III. Webserver-Caches deaktivieren
IV. Varnish Reverse Proxy-Cache für große Shops
V. Shopware Cache-Ordner manuell löschen
I. PHP-OPcache
Die meisten Bestandteile von Shopware und unseren Pickware Modulen sind in der Skriptsprache PHP geschrieben. Bei einem Seitenaufruf werden die entsprechenden Skripte auf deinem Webserver zunächst vom PHP-Modul in vorkompilierten Code umgewandelt und anschließend ausgeführt. Um die Ladezeit deiner Shopseiten für deine Kunden zu verkürzen, kann PHP bereits kompilierte Skripte im PHP-OPcache speichern. Dadurch entfällt die zeit- und rechenintensive Kompilierung bei erneuten Aufrufen.
Um den PHP-OPcache optimal an deine Anforderungen anzupassen, bietet PHP Ihnen vielfältige Einstellmöglichkeiten an. Wir zeigen dir, auf welche Einstellungen du besonders achten solltest und wie du den OPcache für große Shops optimieren kannst.
Voraussetzungen
- Prüfe zunächst in deinem Shopware Backend, ob der PHP-OPcache bereits aktiviert ist. Öffne hierzu das Perfomance-Fenster unter Einstellungen → Caches/ Performance → Caches/ Performance und wechsle in den Tab Einstellungen → Performance checks. Bei aktiviertem Cache sollte für den Zend OPcache ein grüner Haken erscheinen, andernfalls ein rotes X.
- Überprüfe zusätzlich die auf deinem Webserver installierte PHP-Version. Für alle im folgenden gezeigten Einstellungen ist mindesten PHP 5.5 notwendig. Wir empfehlen jedoch ausdrücklich den Einsatz von PHP 7.0 oder höher, um von maximaler Performance und Sicherheit zu profitieren. Ob du die neueste Version installiert hast, kannst du im Fenster Performance checks am grünen Haken für die PHP version erkennen. Solltest du eine ältere Version einsetzen, wird stattdessen ein Warndreieck angezeigt.
Wichtige Einstellungen des OPcache
Alle PHP-Einstellungen sind üblicherweise in der Datei php.ini auf deinem Webserver gespeichert. In welchem Verzeichnis sich diese befindet, hängt von deiner Serverkonfiguration ab. Den genauen Speicherort kannst du im Backend unter Einstellungen → Systeminfo → PHP-Info → Loaded Configuration File ablesen:
Wenn du die php.ini bearbeiten, solltest du zuvor ein Backup dieser Datei anlegen. Speichere anschließend das Dokument und starte deinen Webserver neu, damit die Änderungen übernommen werden.
Deine php.ini-Datei enthält sehr viele Einstellungen, um PHP zu konfigurieren. Folgende Einstellungen sind empfehlenswert, damit dein OPcache optimal und fehlerfrei mit Shopware funktioniert:
- opcache.enable: On (Default: On)
Aktiviere den PHP-Opcache auf deinem Webserver. Wenn dieser bisher deaktiviert war, solltest du ihn jetzt aktivieren.
- opcache.validate_timestamps: On (Default: On)
Diese Einstellung muss aktiviert sein, damit PHP die gespeicherten Skripte regelmäßig auf Veränderungen überprüft und gegebenenfalls aktualisiert werden. Hierdurch ist ein manuelles Leeren des Caches normalerweise nicht nötig.
- opcache.revalidate_freq: 2 (Default: 2)
Gibt an, wie häufig (in Sekunden) die gecachten Skripte auf Veränderungen überprüft werden.
- opcache.use_cwd: On (Default: On)
Bei Aktivierung verlinkt PHP den Arbeitsbereich im Cache mit dem jeweiligen Skript. Dies vermeidet Kollisionen zwischen Dateien mit dem selben Dateinamen.
- opcache.validate_root: On/Off (Default: Off)
Sollte dein Webserver auf einem Shared Hosting-System installiert sein, muss diese Option unbedingt auf On gesetzt sein! Dies vermeidet bei Aktivierung Überschneidungen des Cache-Systems mit dem anderer Webseiten auf demselben physischen Server.
- opcache.save_comments: On (Default: On)
Diese Einstellung berücksichtigt das Laden von Kommentaren im Quellcode. Dies sollte unbedingt aktiviert sein, da einige Shopware Module diese Funktion benötigen.
OPcache für große Shops skalieren
Für die meisten Shopware Shops sollten die Voreinstellungen des PHP-OPcache bereits eine ausreichende Performance bieten. Wenn du jedoch sehr große Shops und/oder viele installierte Plugins auf deinem Webserver betreibst, kannst du die folgenden Einstellungen anpassen, um die Performance zu erhöhen:
- opcache.memory_consumption: 128/256/512 (Default: 128)
Mit dieser Option wird dem OPcache der maximal verwendbare Arbeitsspeicher in Megabyte zugewiesen. 128MB reichen für die meisten kleineren Shops aus. Für sehr große Shops oder bei vielen zusätzlichen installierten Modulen kannst du den Wert auf 256 oder mehr erhöhen. Die aktuelle Speicherauslastung des Caches kannst du im Backend unter Einstellungen → Systeminfo → PHP-Info → Zend OPcache → Used memory und Free memory ablesen.
- opcache.max_accelerated_files: 10000/12500/15000 (Default: 10000)
Die Einstellung gibt die maximale Anzahl an PHP-Skripten an, die im OPcache gespeichert werden können. Eine typische Shopware 5-Installation verwendet ca. 7000 Skripte. Wenn du viele zusätzliche Module einsetzt und ausreichend freier Arbeitsspeicher zur Verfügung steht, kann der Wert entsprechend erhöht werden, um die Performance zu verbessern. Einen Anhaltspunkt liefert das Verhältnis der Zahlen Cache misses zu Cache hits im Backend unter Einstellungen → Systeminfo → PHP-Info → Zend OPcache. Sollte das Verhältnis größer 1% betragen, könnte eine Erhöhung der Einstellung die Performance verbessern. Berücksichtige jedoch zusätzlich, ob der Speicherplatz des Caches ausreichend groß bemessen ist, siehe opcache.memory_consumption.
Eine Übersicht aller Einstellungen des OPcache findest du in der offiziellen PHP-Dokumentation. Weiterhin bietet auch Shopware einige Information zur Nutzung des OPcache.
II. PHP APCu-Cache
Der PHP APCu-Cache ermöglicht es PHP-basierten Programmen wie Shopware, häufig benötigte Daten, z. B. Shop-Einstellungen, Userdaten, häufig durchgeführte Datenbankabfragen o. ä., im Arbeitsspeicher des Webserver abzulegen. Shopware unterstützt die Verwendung des APCu-Caches und kann durch dessen Nutzung die Ladezeiten deines Shops weiter reduzieren.
Status des APCu-Caches prüfen
Zunächst solltest du überprüfen, ob der APCu-Cache bereits auf Ihrem Webserver aktiviert ist. Gehe hierzu in deinem Backend auf Einstellungen → Caches/Performance → Caches/Performance → Einstellungen → Performance checks. Bei APCu aktiviert sollte ein grüner Haken gesetzt sein, bei einem roten X ist APCu auf deinem Server deaktiviert.
APCu-Cache aktivieren
Um den APCu-Cache zu aktivieren, muss zunächst das entsprechende PHP-Modul auf deinem Webserver installiert werden. Anschließend muss dieses über einen Eintrag in der php.ini aktiviert werden. Wende dich hierzu an den Hoster deines Webserver bzw. nutze folgende Anleitung sowie die offizielle PHP-Dokumentation.
III. Webserver-Caches deaktivieren
Viele Webserver bieten eigene Caching-Module an, welche analog zum Shopware-eigenen HTTP-Cache häufig aufgerufene Websites deines Shops speichern, um den erneuten Zugriff zu beschleunigen. In den allermeisten Fällen sollten diese Caches aber unbedingt deaktiviert bleiben, da sie sonst zu Konflikten mit dem Shopware HTTP-Cache führen. Shopware kann eine Cache-invalidierung, also das Aktualisieren bzw. Löschen von veränderten Elementen im Cache, nur mit dem eigenen Cache durchführen, wodurch die Caches des Webservers weiterhin alte Versionen deiner Website ausliefern würden. Eine Ausnahme ist die Anbindung von Reverse Proxy-Caches an Shopware. Nachfolgend sind die betroffenen Caches der jeweiligen Webserver erläutert.
Apache
Apache ist der von Shopware offiziell empfohlene Webserver und bietet zwei optionale Caching-Methoden an: mod_disk_cache und mod_mem_cache mit dem übergeordneten Modul mod_cache. Kontrolliere daher bitte, dass diese drei Apache-Module deaktiviert sind. Dies ist nur über das Kommandozeilen-Tool deines Webservers möglich, die nötigen Befehle sind abhängig von deinem eingesetzten Server-Betriebssystem und erfordern entsprechende Berechtigungen. Wende dich dazu gegebenenfalls an deinen Hoster.
nginx
Der Webserver nginx wird zwar nicht offiziell von Shopware unterstützt, erfreut sich aufgrund seiner guten Performance aber dennoch hoher Beliebtheit unter Shopware-Nutzern. nginx bietet im fastCGI-Modul einen eigenen Cache, den nginx fastcgi_cache an. Analog zu den Apache-Caches sollte dieser unbedingt deaktiviert bleiben, um Konflikte mit Shopware zu vermeiden. Kontrolliere dies am besten auf deinem Webserver.
IV. Varnish Reverse Proxy-Cache für große Shops
Sollte der Shopware-eigene HTTP-Cache für deinen Shop nicht ausreichen, könnte der Einsatz vorgelagerter Caches, sogenannter Reverse Proxy-Caches, eine Lösung bieten. Diese Caches sind Bestandteil eines Reverse Proxy-Servers, welcher vor deinen eigentlichen Webserver geschaltet wird und zunächst alle Webanfragen an deinen Shop entgegennimmt. Anschließend wird er mithilfe des integrierten Caches versuchen, die Anfragen selbstständig zu beantworten, d.h. die angefragten Websites oder deren Elemente aus dem eigenen Cache zu generieren. Sollte die Anfrage nicht mit dem Reverse Proxy-Cache beantwortet werden können, wird sie an den normalen Webserver und damit das Shopware System weitergeleitet, welches wie gewohnt die Anfrage bearbeitet.
Leistung & Anforderung
Aufgrund höherer Leistung und Konfigurierbarkeit können Reverse Proxy-Caches die maximale Anzahl gleichzeitiger Kunden in deinem Shop erhöhen und die Ladegeschwindigkeit deines Shops meist verbessern. Diese Reverse Proxy-Caches müssen jedoch vom Shopware System unterstützt und perfekt auf dieses abgestimmt sein, denn für eine fehlerfreie Cache-Invalidierung ist eine permanente Kommunikation zwischen Shopware und dem Cache notwendig.
Varnish-Cache
Der Varnish-Cache ist ein leistungsfähiger Reverse Proxy-Cache und ersetzt damit den Shopware-eigenen HTTP-Cache. Damit der Varnish-Cache in Shopware eingebunden werden kann und die Cache-Invalidierung funktioniert, ist jedoch eine Shopware-5-Enterprise-Lizenz nötig. Alle Informationen zur Einrichtung des Varnish-Caches unter Shopware findest du hier.
V. Shopware Cache-Ordner manuell löschen
In Ausnahmefällen kann es passieren, dass Shopware Caches den Start deines gesamten Shopware Backends blockieren. In solchen Fällen kannst du den Inhalt der betreffenden Caches manuell leeren. Hierzu benötigst du Zugriff auf das Dateisystem deines Webservers. Wechsle dann in das Dokumentenverzeichnis deines Webservers, z.B. /var/www/. Die einzelnen Caches befinden sich in folgenden untergeordneten Verzeichnissen:
- Shopware Konfiguration: var/cache/production_XXX/general/
- Shopware HTTP-Cache: var/cache/production_XXX/html/
- Templates: var/cache/production_XXX/templates/
- Themes: web/cache/
- Shopware Proxies: var/cache/production_XXX/proxies/
- Doctrine Proxies: var/cache/production_XXX/doctrine/proxies/
Zum Löschen markiere den gesamten Inhalt der betreffenden Cache-Ordner und lösche diesen anschließend.