Chciałbym włączyć wstępne ładowanie opcache ( RFC ) na moich serwerach produkcyjnych przy użyciu PHP 7.4. Używam Symfony , ale dotyczy to całego PHP.
Chciałbym włączyć wstępne ładowanie opcache ( RFC ) na moich serwerach produkcyjnych przy użyciu PHP 7.4. Używam Symfony , ale dotyczy to całego PHP.
Odpowiedzi:
Przede wszystkim należy dodać:
opcache.preload=/path/to/project/preload.php
dla Twojej php.ini
Następnie w skrypcie PHP należy przekazać opcache_compile_file($file);
każdy plik, który chcesz wstępnie załadować.
Według postu na blogu wydaje się to trywialne. Najwyraźniej Symfony od 4.4 generuje skrypt wstępnego ładowania, który należy ustawić wphp.ini
:
opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php
Zrobiłem kilka testów w moim lokalnym środowisku Docker i tak to wyglądało:
PHP 7.3 bez OPcache (bieżący)
Requests per second: 8.75 [#/sec] (mean)
Time per request: 114.402 [ms] (mean)
PHP 7.4 bez OPcache
Requests per second: 11.44 [#/sec] (mean)
Time per request: 87.417 [ms] (mean)
PHP 7.4 z OPcache, bez wstępnego ładowania (Apache + modphp)
Requests per second: 30.25 [#/sec] (mean)
Time per request: 33.053 [ms]
PHP 7.4 z OPcache, bez wstępnego ładowania (nginx + php fpm)
Requests per second: 40.00 [#/sec] (mean)
Niestety nie udało mi się włączyć wstępnego ładowania :( Wystąpiły następujące błędy (zarówno w Apache + Mod, jak i Nginx + FPM):
double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)
Ta funkcja wygląda jednak jak WIP . Ponownie sprawdzę poprawność tej odpowiedzi, gdy będę mógł użyć tej funkcji wstępnego ładowania. Ogólnie jestem pod wrażeniem, + 30% wydajności po samej aktualizacji z PHP 7.3
do 7.4
.