opcacheのプリロードを有効にしたい ( [〜#〜] rfc [〜#〜] )本番サーバーではPHP 7.4を使用しています。 Symfony を使用していますが、これはすべてのPHPに適用されます。
ブログ投稿 によると、これは簡単なようです。どうやら4.4以降のsymfonyは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 [〜#〜] のように見えますが。このプリロード機能を使用できるようになったときに、この回答を再検証します。全体的に、PHP 7.3
から7.4
にアップグレードするだけで、パフォーマンスが+ 30%向上しました。
まず、追加する必要があります:
_opcache.preload=/path/to/project/preload.php
_
あなたの_php.ini
_に
次に、PHPスクリプトで、プリロードする各ファイルをopcache_compile_file($file);
で渡す必要があります。