web-dev-qa-db-ja.com

Zend OPCache-opcache.enable_cli 1または0?それは何をするためのものか?

ドキュメントでは「ほとんどデバッグに使用」と書かれており、「問題が発生してデバッグを行う必要がない限り有効にしないでください」と思われますが、ほとんどの場合、「opcache .enable_cli 1 "しかし、なぜですか?この問題に関する情報を見つけることができなかったので、誰かが知っている場合、ドキュメントが基本的にそれを0に維持するように指示している場合、なぜそれを有効にする必要がありますか?

28
Jack

そのままにしておきます。主にOPcache自体の問題をデバッグする際に使用します。

opcache.enable_cliオプションは、PHP実行時のOPcache PHPコマンドラインからのスクリプト(phpコマンドを使用))を有効にします。ただし、 for PHP 5.x OPcache拡張モジュールは、キャッシュされたオペコードをメモリに保存することで動作します現在のプロセスの。これは、実行中のプロセスがPHPは、WebサーバーやFastCGIでのように、これらのオペコードを再利用できる複数のリクエストを処理します。PHP CLI、1つの「リクエスト「終了すると、メモリと時間を無駄にします。

31
duskwuff

PHP7とファイルベースのキャッシングを使用して、CLIのopcacheを有効にすることが理にかなっています。最良の可能性は、次の構成のCLI用に個別のphp.iniを用意することです。

_opcache.enable=1
opcache.enable_cli=1
opcache.file_cache="/tmp/php-file-cache"
opcache.file_cache_only=1
opcache.file_cache_consistency_checks=1
_

_opcache.file_cache_only=1_は、メモリ内opcacheが無効化され、ファイルのみが使用されることを確認します。これはCLIに必要なことです。これにより、実行時間が大幅に短縮されます。

FPMのphp.iniでは、同じ設定が必要ですが、_opcache.file_cache_only=0_を使用するため、インメモリopcacheが使用され、ファイルキャッシュがフォールバックとして使用されます(ファイルがキャッシュは、キャッシュされたファイルが残るため、FPMの再起動時またはopcacheのリセット時のウォームアップ時間を短縮します。

この方法で、CLIとFPMはファイルキャッシュを共有し、FPMは最大速度のために2番目のプライマリキャッシュとしてメモリ内キャッシュを持ちます。 PHP7の大幅な改善! CLIとFPMの両方が書き込み可能で、同じユーザーが書き込み/読み取りを行う_opcache.file_cache_のディレクトリを必ず選択してください。

2017年更新

_opcache.validate_timestamps=0_を設定するときにキャッシュをリセットする方法がないため、FPMでファイルキャッシュを使用することはお勧めしません(CLIでのみ使用)。ファイルキャッシュにより、PHP-FPMは変更を認識できません。 opcache_reset()またはPHP-FPMの完全な再起動はファイルキャッシュに影響を与えず、ファイルキャッシュに相当するものがないため、変更されたスクリプトは認識されません。これを2016年3月に " bug "/" feature request "として報告しましたが、これは現在問題とは見なされていません。 _opcache.validate_timestamps=0_を使用する場合は注意してください!

29
iquito

PHPドキュメント

opcache.enable_cli booleanは、CLIバージョンのPHPのオペコードキャッシュを有効にします。これは主にテストとデバッグに役立ちます。

したがって、本当に必要な場合以外は無効にする必要があります。

これは、コマンドラインから長期的な移行プロセスを実行している場合に役立ちます(個人的には、広範な移行スクリプトを実行してCLIのOPcache v7.0.3をテストしましたが、パフォーマンスの向上はあまり見られませんでした)。

2
kenorb