Je voudrais activer le préchargement opcache ( RFC ) sur mes serveurs de production en utilisant PHP 7.4. J'utilise Symfony , mais cela s'applique à tout PHP.
Je voudrais activer le préchargement opcache ( RFC ) sur mes serveurs de production en utilisant PHP 7.4. J'utilise Symfony , mais cela s'applique à tout PHP.
Réponses:
Tout d'abord, vous devez ajouter:
opcache.preload=/path/to/project/preload.php
à ton php.ini
Ensuite, dans votre script PHP, vous devez passer opcache_compile_file($file);
chaque fichier que vous souhaitez précharger.
Selon le blog, cela semble anodin. Apparemment, Symfony depuis 4.4 génère un script de préchargement qui doit être défini dans php.ini
:
opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php
J'ai fait quelques tests dans mon environnement Docker local et voici comment ça s'est passé:
PHP 7.3 sans OPcache (actuel)
Requests per second: 8.75 [#/sec] (mean)
Time per request: 114.402 [ms] (mean)
PHP 7.4 sans OPcache
Requests per second: 11.44 [#/sec] (mean)
Time per request: 87.417 [ms] (mean)
PHP 7.4 avec OPcache, sans préchargement (Apache + modphp)
Requests per second: 30.25 [#/sec] (mean)
Time per request: 33.053 [ms]
PHP 7.4 avec OPcache, sans préchargement (nginx + php fpm)
Requests per second: 40.00 [#/sec] (mean)
Malheureusement, je n'ai pas pu activer le préchargement :( J'ai rencontré les erreurs suivantes (dans Apache + Mod et Nginx + FPM):
double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)
Cette fonctionnalité ressemble cependant à un WIP . Je vais revalider cette réponse lorsque je pourrai utiliser cette fonction de préchargement. Dans l'ensemble, je suis assez impressionné, + 30% de performances simplement en passant de PHP 7.3
à7.4
.