Como ativar o pré-carregamento do opcache no PHP 7.4?

9

Gostaria de habilitar o RFC ( opcache preloading ) em meus servidores de produção usando o PHP 7.4. Estou usando o Symfony , mas isso se aplica a todo o PHP.

emix
fonte
11
Não tenho certeza de quanto o reddit.com/r/PHP/comments/e8pgzi/… afetará os planos de usá-lo.
Nigel Ren
11
Veja este artigo . Leia também o bug que Nigel postou, pois parece bastante crítico por enquanto.
Jeto 12/12/19

Respostas:

4

Antes de tudo, você deve adicionar:

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

para o seu php.ini

Então, no seu script PHP, você deve passar opcache_compile_file($file);cada arquivo que deseja pré-carregado.

MorganFreeFarm
fonte
4

De acordo com o post do blog, isso parece trivial. Aparentemente, o Symfony desde 4.4 gera um script de pré-carregamento que deve ser definido no php.ini:

opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php

Fiz alguns testes no meu ambiente local do Docker e foi assim:

PHP 7.3 sem OPcache (atual)

Requests per second:    8.75 [#/sec] (mean)
Time per request:       114.402 [ms] (mean)

PHP 7.4 sem OPcache

Requests per second:    11.44 [#/sec] (mean)
Time per request:       87.417 [ms] (mean)

PHP 7.4 com OPcache, sem pré-carregamento (Apache + modphp)

Requests per second:    30.25 [#/sec] (mean)
Time per request:       33.053 [ms]

PHP 7.4 com OPcache, sem pré-carregamento (nginx + php fpm)

Requests per second:    40.00 [#/sec] (mean)

Infelizmente, não consegui ativar o pré-carregamento :( Encontrei os seguintes erros (no Apache + Mod e Nginx + FPM):

double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)

Esse recurso parece um WIP . Vou revalidar esta resposta quando puder usar essa coisa de pré-carregamento. No geral, estou bastante impressionado, com + 30% de desempenho apenas atualizando do PHP 7.3para 7.4.

emix
fonte