PHP OPcache

Wie kann ich mein PHP OPcache konfigurieren?

Was ist OPcache?

Der PHP OPcache ist ein PHP-Modul, das den PHP-Code der Webanwendung (wie Shopware oder Magento) im Arbeitsspeicher zwischenspeichert. Hierdurch werden diese wesentlich schneller ausgeführt und die PHP-Skripte müssen nicht bei jeder Ausführung neu geparst werden.

Wie überprüfe ich den PHP OPcache?

Der aktuelle Status vom PHP OPcache lässt sich einfach über das Cachetool von Samuel Gordalina überprüfen. Wichtig ist hier, dass dies über den jeweiligen Socket von FPM erfolgen muss.

Ein Aufruf wie

cachetool opcache:status --fcgi=/var/run/php7.4-fpm-default.sock

zeigt dabei unter anderem die aktuelle Belegung und die Hitrate.

Was ist OPcache preloading?

Seit PHP 7.4 ist es möglich, über OPcache preloading beim Starten von PHP ein Skript anzugeben, das direkt geparsed werden soll. Damit kann man sicherstellen, dass auch nach einem Deployment alle relevanten PHP-Dateien schnell verfügbar sind. Die Konfiguration hierzu erfolgt über die Variablen opcache.preload und opcache.preload_user. Diese Funktion sollte mit Vorsicht verwendet werden, da nach dem Preload alle geladenen Funktionen und Klassen innerhalb von PHP zur Verfügung stehen – auch wenn Sie in dem PHP-Skript, das diese aufgerufen hat, gar nicht explizit eingebunden wurden.

Weitere Details zum Preloading finden Sie hier: https://www.php.net/manual/de/opcache.preloading.php

Was ist der OPcache Just in Time Compiler (JIT)?

Mit PHP 8.0 wurde der PHP OPcache um einen JIT erweitert. Während der Bytecode, der im OPcache gespeichert wird, weiterhin von der PHP VM interpretiert wird, entfällt dieser Schritt beim JIT. Der JIT kann daher häufig verwendete Codepfade direkt in Maschinencode speichern, womit sich bei rechenintensiven PHP-Anwendungen die Performance erheblich verbessert. Bei klassischen PHP-Anwendungen, die sehr stark von der Datenbank und ähnlichen Diensten abhängig sind, ist dieser Effekt allerdings deutlich geringer.

Um den JIT zu verwenden, genügt es in den PHP-Standardeinstellungen den Wert opcache.jit_buffer_size zu vergrößern.

Welche Werte sollten wie konfiguriert sein?

Unserer Erfahrung nach sind die folgenden vier Einstellungen sehr wichtig:

opcache.memory_consumption

opcache.max_accelerated_files

opcache.interned_strings_buffer

opcache.revalidate_freq


Für die drei ersten Einstellungen sind die optimalen Werte von der jeweils verwendeten PHP-Einstellung abhängig. Der Wert opcache.revalidate_freq steuert, wie oft geprüft wird, ob sich eine PHP-Datei geändert hat.

opcache.memory_consumption steuert dabei, wie viel Arbeitsspeicher maximal für den OPcache verwendet werden darf. Hier ist sicherzustellen, dass auch ausreichend freier Arbeitsspeicher vorhanden ist.

Für Shopware- und Magento-Shops kommt man hier üblicherweise mit 512 MB aus. Für kleinere PHP-Projekte genügen entsprechend auch weniger Arbeitsspeicher.

opcache.max_accelerated_files steuert die Anzahl der Dateien, die maximal vom OPcache gecacht werden sollen. Die angegebene Zahl wird auf einen der folgenden Werte aufgerundet:

  • 223
  • 463
  • 983
  • 1979
  • 3907
  • 7963
  • 16229
  • 32531
  • 65407
  • 130987
  • 262237
  • 524521
  • 1048793

Unserer Erfahrung nach sind 65407 Dateien für Shopware- und Magento-Shops ausreichend.

Neben dem Cachen kompletter PHP-Dateien, kann der OPcache auch Strings cachen. Dies erfolgt über den Wert opcache.interned_strings_buffer. Mit 64 MB kommen Magento- und Shopware-Shops unserer Erfahrung nach aus.

Der Wert opcache.revalidate_freq steuert, wie oft geprüft wird, ob sich eine PHP-Datei geändert hat. Ein Wert von 60, sorgt daher dafür, dass alle 60 Sekunden geprüft wird, ob sich die PHP-Dateien geändert haben. Für einen stark frequentierten Shop empfehlen wir daher eine Einstellung von mindestens 60. Es ist alternativ auch möglich, die Prüfung über die Einstellung opcache.validate_timestamps komplett zu deaktivieren. In diesem Fall werden geänderte PHP-Skripte nur bei einem PHP-Reload oder -Restart angewandt. Ab PHP 8.0 lohnt es sich auch, die opcache.jit_buffer_size zu setzen, um vom JIT profitieren zu können.

Was ist beim Deployment zu beachten?

Damit der OPcache von alten Daten befreit wird, empfehlen wir generell nach jedem Deployment den OPcache komplett zu leeren. Dies ist durch einen PHP-Reload über unser Tool cluster-control automatisiert möglich.

OPcache bei maxcluster

Bei maxcluster haben Sie die Möglichkeit, einen 1-Klick Performance-Check mit unserem Tool ShopPerformance durchzuführen. Über 60 Parameter werden überprüft und Ihr Shop wird dabei auf Herz und Nieren getestet. Nach jedem ShopPerformance-Scan erhalten Sie eine übersichtliche Auflistung aller Optimierungs-Parameter – nach Relevanz und Wichtigkeit sortiert. Zusätzlich beinhaltet Ihr Report konkrete Handlungsempfehlungen, basierend auf unseren Best Practices. Diese können Sie direkt umsetzen und werden umgehend einen Performance-Zuwachs feststellen.

Weitere Informationen finden Sie unter https://maxcluster.de/performance-skalierbarkeit#shopperformance

Alternativ können Sie die OPcache-Einstellungen im Managed Center unter Webserver > Apache oder Webserver > NGINX über die Option PHP Global Config auch direkt selbst verwalten.




Bei Fragen steht Ihnen unser Support telefonisch unter 05251/414130 oder per E-Mail an support@maxcluster.de zur Verfügung.

Veröffentlicht am 08.03.2024