Mehr Performance mit PHP OPcache in Shopware 6
Erwin Walter

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 TechnologiesAlternativ 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=1Wichtig: 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:clearOPcache 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 SystemPreload 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_consumptionje nach Codebasis erhöhen;interned_strings_buffersinnvoll 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 50Weitere 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_NOTICEWerte abhängig von Projektgröße und Hoster anpassen.
Cache-Übersicht in der Praxis (FroshTools)

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.