Ohne opcache liest und kompiliert PHP bei jeder Anfrage jede Datei - dieselbe Arbeit, tausendfach pro Minute, für Dateien, die sich nicht geändert haben. opcache hält die kompilierte Form im Speicher. Meist ist es die größte einzelne verfügbare Verbesserung, und es ist eine Einstellung.

opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2

Prüfen, ob er wirklich an ist

php -i | grep -E 'opcache.enable|opcache.memory'
# or, in a page you can reach:
print_r(opcache_get_status()['opcache_statistics']);
  • opcache_hit_rate unter 95 % - memory_consumption ist zu klein, und er wirft Dateien hinaus, die er wieder brauchen wird.
  • num_cached_keys nahe max_accelerated_files - erhöhen Sie das Dateilimit; ein großes Framework hat mehr Dateien, als die Vorgabe zulässt.

Was er NICHT tut

Er speichert kompilierten Code, keine Ergebnisse. Eine langsame Abfrage ist mit eingeschaltetem opcache genauso langsam. Ist Ihre Seite langsam wegen dem, was sie die Datenbank fragt, ändert das nichts - und das ist die häufigste Enttäuschung.

Die Einstellung, die ein Deployment verbirgt

opcache.validate_timestamps=0 ist schneller und heißt, dass PHP nie prüft, ob eine Datei sich geändert hat. Ihr Deployment geht raus, und die Website liefert weiter den alten Code aus, ohne irgendwo einen Fehler. Wenn Sie das setzen, MUSS Ihr Deployment den Cache leeren.
# after deploying, with validate_timestamps=0
cachetool opcache:reset
# or reload the pool
systemctl reload php8.3-fpm
Auf EGPHP-Hosting ist opcache an und auf den Pool abgestimmt. Diese Seite ist für einen VPS, den Sie selbst betreiben.