Как включить предварительную загрузку opcache в PHP 7.4?

9

Я хотел бы включить предварительную загрузку opcache ( RFC ) на моих производственных серверах с использованием PHP 7.4. Я использую Symfony , но это относится ко всему PHP.

Emix
источник
1
Не уверен, насколько reddit.com/r/PHP/comments/e8pgzi/… повлияет на любые планы его использования.
Найджел Рен
1
Проверьте эту статью . Также прочитайте эту ошибку, опубликованную Найджелом, так как она пока кажется весьма критичной.
Джето

Ответы:

4

Прежде всего вы должны добавить:

opcache.preload=/path/to/project/preload.php

на ваш php.ini

Затем в вашем PHP-скрипте вы должны передать opcache_compile_file($file);каждый файл, который вы хотите предварительно загрузить.

MorganFreeFarm
источник
4

Согласно сообщению в блоге, это кажется тривиальным. Очевидно, 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.

Emix
источник