Jak mogę włączyć wstępne ładowanie opcache w PHP 7.4?

9

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.

emiks
źródło
1
Nie jestem pewien, jak bardzo reddit.com/r/PHP/comments/e8pgzi/… wpłynie na wszelkie plany korzystania z niego.
Nigel Ren,
2
Symfony na wstępnym
załadowaniu
1
Sprawdź ten artykuł . Przeczytaj także ten błąd, który opublikował Nigel, ponieważ na razie wydaje się dość krytyczny.
Jeto,

Odpowiedzi:

4

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ć.

MorganFreeFarm
źródło
4

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.3do 7.4.

emiks
źródło