Я хотел бы включить предварительную загрузку opcache ( RFC ) на моих производственных серверах с использованием PHP 7.4. Я использую Symfony , но это относится ко всему PHP.
Я хотел бы включить предварительную загрузку opcache ( RFC ) на моих производственных серверах с использованием PHP 7.4. Я использую Symfony , но это относится ко всему PHP.
Ответы:
Прежде всего вы должны добавить:
opcache.preload=/path/to/project/preload.php
на ваш php.ini
Затем в вашем PHP-скрипте вы должны передать opcache_compile_file($file);
каждый файл, который вы хотите предварительно загрузить.
Согласно сообщению в блоге, это кажется тривиальным. Очевидно, Symfony начиная с 4.4 генерирует сценарий предварительной загрузки, который должен быть установлен в php.ini
:
opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php
Я провел несколько тестов в своей локальной среде Docker, и вот как это произошло:
PHP 7.3 без OPcache (текущий)
Requests per second: 8.75 [#/sec] (mean)
Time per request: 114.402 [ms] (mean)
PHP 7.4 без OPcache
Requests per second: 11.44 [#/sec] (mean)
Time per request: 87.417 [ms] (mean)
PHP 7.4 с OPcache, без предварительной загрузки (Apache + modphp)
Requests per second: 30.25 [#/sec] (mean)
Time per request: 33.053 [ms]
PHP 7.4 с OPcache, без предварительной загрузки (nginx + php fpm)
Requests per second: 40.00 [#/sec] (mean)
К сожалению, я не смог включить предварительную загрузку :( Я обнаружил следующие ошибки (как в Apache + Mod, так и в Nginx + FPM):
double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)
Эта функция выглядит как WIP . Я собираюсь подтвердить этот ответ, когда смогу использовать эту предварительную загрузку. В целом я очень впечатлен: + 30% производительности, просто благодаря переходу с PHP 7.3
на 7.4
.