web-dev-qa-db-fra.com

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

Je voudrais activer préchargement opcache ( RFC ) sur mes serveurs de production en utilisant PHP 7.4 J'utilise Symfony , mais cela s'applique à tout PHP.

8
emix

Selon le article de blog cela semble trivial. Apparemment, Symfony depuis 4.4 génère un script de préchargement qui doit être défini dans le 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 à un ESSUYER cependant. 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.

3
emix

Tout d'abord, vous devez ajouter:

opcache.preload=/path/to/project/preload.php

à votre php.ini

Ensuite, dans votre script PHP PHP, vous devez passer dans opcache_compile_file($file); chaque fichier que vous souhaitez précharger.

4
MorganFreeFarm