Ich möchte das Opcache Preloading ( RFC ) auf meinen Produktionsservern mit PHP 7.4 aktivieren . Ich verwende Symfony , aber dies gilt für alle PHP.
Ich möchte das Opcache Preloading ( RFC ) auf meinen Produktionsservern mit PHP 7.4 aktivieren . Ich verwende Symfony , aber dies gilt für alle PHP.
Antworten:
Zunächst sollten Sie hinzufügen:
opcache.preload=/path/to/project/preload.php
zu deinem php.ini
Dann sollten Sie in Ihrem PHP-Skript opcache_compile_file($file);
jede Datei übergeben, die Sie vorinstallieren möchten.
Laut dem Blog-Beitrag scheint dies trivial zu sein. Anscheinend generiert Symfony seit 4.4 ein Preload-Skript, das eingestellt werden muss in php.ini
:
opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php
Ich habe einige Tests in meiner lokalen Docker-Umgebung durchgeführt und so ging es:
PHP 7.3 ohne OPcache (aktuell)
Requests per second: 8.75 [#/sec] (mean)
Time per request: 114.402 [ms] (mean)
PHP 7.4 ohne OPcache
Requests per second: 11.44 [#/sec] (mean)
Time per request: 87.417 [ms] (mean)
PHP 7.4 mit OPcache ohne Vorladen (Apache + Modphp)
Requests per second: 30.25 [#/sec] (mean)
Time per request: 33.053 [ms]
PHP 7.4 mit OPcache ohne Vorladen (nginx + php fpm)
Requests per second: 40.00 [#/sec] (mean)
Leider konnte ich das Vorladen nicht aktivieren :( Ich habe folgende Fehler festgestellt (sowohl in Apache + Mod als auch in Nginx + FPM):
double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)
Diese Funktion sieht jedoch wie eine WIP aus . Ich werde diese Antwort erneut validieren, wenn ich diese Vorladefunktion verwenden kann. Insgesamt bin ich ziemlich beeindruckt, + 30% Leistung nur durch ein Upgrade von PHP 7.3
auf 7.4
.