Comment puis-je activer le préchargement opcache en PHP 7.4?

9

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.

emix
la source
1
Je ne sais pas dans quelle mesure reddit.com/r/PHP/comments/e8pgzi/… affectera les plans d'utilisation.
Nigel Ren
1
Consultez cet article . Lisez également ce bug que Nigel a publié, car il semble assez critique pour le moment.
Jeto

Réponses:

4

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.

MorganFreeFarm
la source
4

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 .

emix
la source