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.
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.
Respostas:
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.
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.3
para 7.4
.