web-dev-qa-db-ja.com

PHP 7.4)でopcacheプリロードを有効にするにはどうすればよいですか?

opcacheのプリロードを有効にしたい[〜#〜] rfc [〜#〜] )本番サーバーではPHP 7.4を使用しています。 Symfony を使用していますが、これはすべてのPHPに適用されます。

8
emix

ブログ投稿 によると、これは簡単なようです。どうやら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%向上しました。

3
emix

まず、追加する必要があります:

_opcache.preload=/path/to/project/preload.php
_

あなたの_php.ini_に

次に、PHPスクリプトで、プリロードする各ファイルをopcache_compile_file($file);で渡す必要があります。

4
MorganFreeFarm