WalterLabs Logo
WalterLabs
Kontakt

Mehr Performance mit PHP OPcache in Shopware 6

Erwin Walter

Erwin Walter

OPcache Performance in Shopware 6

Warum OPcache?

PHP-Code wird bei jedem Request geparst, in Opcodes kompiliert und anschließend auf der Zend Engine ausgeführt. Das kostet Zeit und CPU. Der PHP OPcache speichert die kompilierten Opcodes im RAM und überspringt Parsing und Kompilierung bei Folgerequests. Ergebnis: geringere TTFB, weniger CPU-Last und stabilere Performance – ideal für Shopware 6 unter Last.

  • Schnellere Serverantwortzeit (TTFB sinkt merklich).
  • Weniger CPU- und I/O-Last bei vielen Requests.
  • Mehr Headroom – oft geringere Hostingkosten.

Wie OPcache arbeitet

Schritt 1–2: Lexing & Parsing → Tokens.
Schritt 3: Kompilierung → Opcodes (Bytecode).
Schritt 4: Interpretation auf der Zend VM.

OPcache cached die in Schritt 3 erzeugten Opcodes im RAM. Bei zukünftigen Aufrufen werden sie direkt aus dem Cache ausgeführt.


1) Ist OPcache aktiv? Schnell prüfen

php -v
                           
# Ausgabe enthält z. B.:
# with Zend OPcache v8.x, Copyright (c), by Zend Technologies

Alternativ im Browser via phpinfo() nach „Zend OPcache“ suchen. „Opcode Caching: Up and Running“ = aktiv.

2) OPcache aktivieren & konfigurieren (php.ini)

Basis-Setup für produktive Shopware-6-Installationen. Werte bei Bedarf an Codegröße und RAM anpassen.

zend_extension=opcache
opcache.enable=1
opcache.memory_consumption=1024
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=15000
opcache.enable_file_override=1
; Für LIVE maximalen Durchsatz (Deploys erfordern Reset/Restart):
opcache.validate_timestamps=0
opcache.revalidate_freq=0
; Optional nützlich
opcache.enable_cli=1
opcache.fast_shutdown=1

Wichtig: opcache.revalidate_freq=0 und validate_timestamps=0 sind optimal für LIVE, erfordern aber bei Deployments ein OPcache-Reset oder einen Neustart von PHP-FPM.

3) Neustarten & Cache leeren

sudo service php-fpm restart   # oder systemctl restart php8.3-fpm
php -r 'if (function_exists("opcache_reset")) opcache_reset();'
bin/console cache:clear

OPcache Preload

Preloading lädt häufig genutzte PHP-Dateien beim Start von PHP-FPM vor und hält sie kompiliert im RAM. Das senkt I/O und TTFB, besonders bei großen Codebasen.

opcache.preload=/var/www/html/var/cache/opcache-preload.php
opcache.preload_user=www-data   # oder nginx je nach System

Preload wirkt nur mit persistenten Prozessen (PHP-FPM, mod_php). Nach Deploys PHP-FPM neu starten.


Monitoring & Praxis

  • Auslastung prüfen (Status/GUI oder opcache_get_status()). OPcache sollte nicht dauerhaft voll laufen.
  • opcache.memory_consumption je nach Codebasis erhöhen; interned_strings_buffer sinnvoll dimensionieren.
  • Für Entwicklungsumgebungen Timestamps validieren: opcache.validate_timestamps=1, opcache.revalidate_freq=0–2.

Schnelles Status-Script

Zum Ad-hoc-Check im Server-Shell:

php -r 'var_export(opcache_get_status(false));' | head -n 50

Weitere PHP-Limits (Kurzempfehlung)

memory_limit=2048M
upload_max_filesize=64M
post_max_size=128M
max_execution_time=3600
max_input_time=1200
file_uploads=On
max_file_uploads=20
max_input_vars=6000
display_errors=Off
log_errors=On
error_reporting=E_ALL & ~E_DEPRECATED & ~E_NOTICE

Werte abhängig von Projektgröße und Hoster anpassen.

Cache-Übersicht in der Praxis (FroshTools)

Shopware Cache/OPcache Übersicht – FroshTools
Diese Ansicht siehst du, wenn das kostenlose Plugin FroshTools (GitHub) installiert ist – super für Monitoring, Cronjobs/Scheduled Tasks, Logs und System-Infos.
Alternativ direkt aus dem Shopware Store installieren.
  • Scheduled Tasks / Cronjobs überwachen
  • Logs schnell einsehen und filtern
  • Cache- und System-Einstellungen prüfen

Mehr dazu auch im Beitrag: FroshTools.


Fazit

OPcache ist einer der effektivsten Low-Effort-Hebel für Shopware 6: schneller, stabiler, günstiger. Mit sinnvollen Defaults (Speicher, File-Override) und strikter Live-Konfiguration (Timestamps aus, Preload) holst du das Maximum heraus. Wichtig bleibt ein sauberer Deploy-Prozess mit OPcache-Reset bzw. PHP-FPM-Restart.