PHP OPCacheの使用方法


249

PHP 5.5がリリースされ、OPCacheと呼ばれる新しいコードキャッシングモジュールを備えていますが、そのドキュメントはありません。

それで、そのドキュメントはどこにあり、OPcacheをどのように使用しますか?



4
ドキュメンテーション:php.net/manual/en/book.opcache.php
David Oliver

ドキュメンテーションがopcacheを正しくコンパイルする方法/それを無効にする方法もPHP 5.6.24+ソースのautoconfの回避策も教えてくれないので、PHPがコンパイルされるのは残念です!:-(
Filip OvertoneSinger Rydlo

@ Fred-ii- 「調整が必要な設定がたくさんあります。それがどのように機能するかを理解し、PHP 5.5リリースプロセスの安定化フェーズ中に問題を特定することは、非常に役立ちます。...そのブログ投稿はあまり役に立ちません。それがどのように機能するかを理解する方法、または設定を調整する最良の方法は説明していません:(
icc97

回答:


371

取り付け

OpCacheは、デフォルトでPHP5.5以降でコンパイルされます。ただし、デフォルトでは無効になっています。PHP5.5以降でOpCacheの使用を開始するには、まずそれを有効にする必要があります。これを行うには、次のことを行う必要があります。

次の行をに追加しますphp.ini

zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)

パスにスペースが含まれている場合は、引用符で囲む必要があります。

zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"

また、実際のZendエンジン(つまり、PHPを実行するもの)に影響を与えるためzend_extension、「通常の」ディレクティブの代わりにディレクティブを使用する必要があることにも注意してくださいextension

使用法

現在使用できる関数は4つあります。

opcache_get_configuration()

OpCacheが現在使用している構成を含む配列を返します。これには、すべてのini設定、バージョン情報、ブラックリストファイルが含まれます。

var_dump(opcache_get_configuration());

opcache_get_status()

これは、キャッシュの現在のステータスに関する情報を含む配列を返します。この情報には、キャッシュの状態(有効、再起動、フルなど)、メモリ使用量、ヒット数、ミス数、その他の役立つ情報が含まれます。キャッシュされたスクリプトも含まれます。

var_dump(opcache_get_status());

opcache_reset()

キャッシュ全体をリセットします。キャッシュされた可能性のあるすべてのスクリプトは、次回の訪問時に再度解析されます。

opcache_reset();

opcache_invalidate()

特定のキャッシュされたスクリプトを無効にします。つまり、スクリプトは次回の訪問時に再度解析されます。

opcache_invalidate('/path/to/script/to/invalidate.php', true);

メンテナンスとレポート

OpCacheの保守と有用なレポートの生成を支援するために作成されたGUIがいくつかあります。これらのツールは、上記の機能を活用します。

OpCacheGUI

免責事項私はこのプロジェクトの作成者です

特徴:

  • OpCacheステータス
  • OpCache構成
  • OpCache統計
  • OpCacheリセット
  • キャッシュされたスクリプトの概要
  • キャッシュされたスクリプトの無効化
  • 多言語
  • モバイルデバイスのサポート
  • 光沢のあるグラフ

スクリーンショット:

状態

キャッシュされたスクリプト

グラフ

モービル

URL:https : //github.com/PeeHaa/OpCacheGUI

opcache-status

特徴:

  • OpCacheステータス
  • OpCache構成
  • OpCache統計
  • キャッシュされたスクリプトの概要
  • 単一ファイル

スクリーンショット:

状態

URL:https : //github.com/rlerdorf/opcache-status

opcache-gui

特徴:

  • OpCacheステータス
  • OpCache構成
  • OpCache統計
  • OpCacheリセット
  • キャッシュされたスクリプトの概要
  • キャッシュされたスクリプトの無効化
  • 自動更新

スクリーンショット:

opcache-gui-overview

URL:https : //github.com/amnuts/opcache-gui


6
PHP-CLIに関して何かありますか?CLIはそれをどのように利用しますか?FPMが再起動すると、OPCacheがリセットされます-CLIのOPCacheにも影響しますか?CLIのOPCacheは分離していますか、それともFPMと同じキャッシュプールを共有していますか?ありがとう!
Shahriyar Imanov 2014

3
OpCacheは、ubuntu 14.04、apache 2.4.7、php 5.5.9の最新のインストールでデフォルトで有効になりました。
jstats 2014年

こんにちは、3番目のスクリーンショットでは、cache_fullがfalseです。これは全ページキャッシュに関連していると想定しています。有効にする方法を教えてください。(それを実現させてください)
brucekaushik 2014

私は間違っています。これはページ全体をキャッシュするためのものではありませんが、キャッシュが使用するメモリがいっぱいになると、trueとして表示されます。とにかく、ありがとう!
brucekaushik 2014

zend_extension = C:\ path \ to \ php_opcache.dll(win)-php.iniにこの行を追加すると正常に機能します。
カリダサン2015年

152

OPcacheはAPCに取って代わります

OPcacheはAPCモジュールを置き換えるように設計されているため、PHPでそれらを並行して実行することはできません。コードの記述方法には影響しないため、これはPHPオペコードのキャッシュに適しています。

ただし、現在APCを使用して(apc_store()関数を介して)他のデータを格納している場合、OPCacheを使用することを決定すると、それを実行できなくなります。

APCuYacなどの別のライブラリを使用する必要があります共有のPHPメモリにデータを格納するを使用するか、PHPとは別のプロセスでメモリにデータを格納するmemcachedのようなものに切り替える必要があります。

また、OPcacheには、APCにあるアップロード進行状況メーターに相当するものはありません。代わりに、Session Upload Progressを使用する必要があります。

OPcacheの設定

OPcacheのドキュメントはここにあり、ここにすべての構成オプションがリストされています。推奨設定は次のとおりです。

; Sets how much memory to use
opcache.memory_consumption=128

;Sets how much memory should be used by OPcache for storing internal strings 
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8

; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000

;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60

;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1

;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1

コードアノテーションを使用するライブラリまたはコードを使用する場合は、コメントの保存を有効にする必要があります。

opcache.save_comments=1

無効にすると、すべてのPHPDocコメントがコードから削除され、最適化されたコードのサイズが小さくなります。「Doc Comments」を無効にすると、既存のアプリケーションやフレームワーク(Doctrine、ZF2、PHPUnitなど)が壊れる可能性があります


4
これらの推奨設定は、本番環境、開発、またはその両方に適していますか?
marcvangend 2013

1
おそらくopcacheとは何か、それが何のために使用されるかについての私の誤解かもしれませんが、以下のPeeHaaステータススクリプトを使用して設定およびテストしました。すべてが機能しています。しかし、私はまだOPの質問をしています。"どうやって使うのですか?" ビューをキャッシュするためのものではありませんか?
isimmons 2013年

3
@isimmons "OPcacheは、コンパイル済みのスクリプトバイトコードを共有メモリに格納することにより、PHPのパフォーマンスを向上させます。これにより、各リクエストでPHPがスクリプトをロードして解析する必要がなくなります。"
Danack 2013年

1
@marcvangend良い点!キャッシングは本番環境でのみ意味があると思うので、これらの構成はおそらく本番環境の設定です。
Sliq 2013

3
推奨設定のパフォーマンスがデフォルトよりも悪い理由、または効果を発揮し始めるタイミングを誰かが説明できますか?
RP

19

私は、opcacheを使用するために2セントのところに立ち寄ります。

データベースと通信できるように、多くのフィールドと検証メソッドと列挙型を備えた広範なフレームワークを作成しました。

opcacheなし

opcacheなしでこのスクリプトを使用し、2.8秒で9000リクエストをApacheサーバーにプッシュすると、すべてのリクエストに追いつくまで、90〜100%cpuで70〜80秒間処理されます。

Total time taken: 76085 milliseconds(76 seconds)

opcacheが有効な場合

opcacheを有効にすると、25〜30%のCPU時間で約25秒間実行され、25%のCPU使用率を超えることはありません。

Total time taken: 26490 milliseconds(26 seconds)

opstaticブラックリストファイルを作成して、フレームワーク以外のすべてのキャッシュを無効にしました。フレームワークはすべて静的で、機能を変更する必要はありません。キャッシュファイルのリロード/検証について心配することなく開発できるように、フレームワークファイルのみを明示的に選択します。すべてをキャッシュすることで、リクエストの合計が1秒節約されます25546 milliseconds

これにより、サーバーが汗をかかなくても、1秒あたりに処理できるデータ/要求の量が大幅に増えます。


3
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;単に置き換えます。iniファイルに入力します。しかし、これは私が使用したものです。ほとんどがデフォルトのもの
Tschallacka

1
ところで、これをmemcacheで実行して2100データベースリクエストを1秒間実行すると、使用するスクリプトが150マイクロ秒以内(約
1/6

1
Opcacheは、コンパイルされた形式のphpファイルをメモリにキャッシュします。そのため、phpパーサーによるディスクからの読み取り、ファイルのコンパイルと最適化のオーバーヘッドがなくなりました。Memcacheは、セッション間で変数を格納するために使用できるものです。たとえば、ユーザーが画面を見つめているときに、同じパラメーターを10秒間要求する更新スクリプトがあるとします。memキャッシュを使用してクエリを1回コンパイルし、メモリからのコンパイルされたクエリを要求し続けることで、クエリを再生成する必要がなくなります。
Tschallacka

2
そうではありません。opcache.revalidate_freq=60;ファイルがメモリ内に存続できる時間を秒単位で決定します。時間切れになるとファイルを再コンパイルします。
Tschallacka

3
実は opcache.revalidate_freqは、スクリプトの変更をチェックする頻度を制御します(タイムスタンプが変更されたかどうかに基づいて)。そのため、スクリプトのタイムスタンプが最後にコンパイルされたときと同じ場合、スクリプトは再コンパイルされません。これはすべて、opcache.validate_timestampsデフォルトで有効になっている設定を変更していないことを前提としています。
jjlin

4

Amazon Linux上のPHP 5.6の場合(RedHatまたはCentOSでも同じである必要があります):

yum install php56-opcache

その後、Apacheを再起動します。


2

Moodleを設定するときにこれに遭遇しました。php.iniファイルに次の行を追加しました。

zend_extension=C:\xampp\php\ext\php_opcache.dll

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60

; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487

; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps

extension=C:\xampp\php\ext\php_intl.dll

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

intl-> http://php.net/manual/en/book.intl.php


1
この設定はここに記載されていることに注意してください:docs.moodle.org/30/en/OPcache
sierrasdetandil

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.