Vorrei abilitare il precaricamento opcache ( RFC ) sui miei server di produzione usando PHP 7.4. Sto usando Symfony , ma questo vale per tutto il PHP.
Vorrei abilitare il precaricamento opcache ( RFC ) sui miei server di produzione usando PHP 7.4. Sto usando Symfony , ma questo vale per tutto il PHP.
Risposte:
Prima di tutto dovresti aggiungere:
opcache.preload=/path/to/project/preload.php
alla tua php.ini
Quindi nel tuo script PHP dovresti passare opcache_compile_file($file);
ogni file che vuoi precaricare.
Secondo il post del blog questo sembra essere banale. Apparentemente Symfony dal 4.4 genera uno script di precarico che deve essere impostato in php.ini
:
opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php
Ho fatto alcuni test nel mio ambiente Docker locale ed è così che è andata:
PHP 7.3 senza OPcache (corrente)
Requests per second: 8.75 [#/sec] (mean)
Time per request: 114.402 [ms] (mean)
PHP 7.4 senza OPcache
Requests per second: 11.44 [#/sec] (mean)
Time per request: 87.417 [ms] (mean)
PHP 7.4 con OPcache, senza precaricamento (Apache + modphp)
Requests per second: 30.25 [#/sec] (mean)
Time per request: 33.053 [ms]
PHP 7.4 con OPcache, senza precaricamento (nginx + php fpm)
Requests per second: 40.00 [#/sec] (mean)
Sfortunatamente non sono stato in grado di abilitare il precaricamento :( Ho riscontrato i seguenti errori (sia in Apache + Mod sia in Nginx + FPM):
double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)
Questa funzione sembra però un WIP . Ho intenzione di riconvalidare questa risposta quando sarò in grado di utilizzare questa cosa di precaricamento. Nel complesso, sono abbastanza impressionato, + 30% di prestazioni semplicemente aggiornando da PHP 7.3
a 7.4
.