PHP 5.5 がリリースされ、OPCache と呼ばれる新しいコード キャッシング モジュールが搭載されていますが、それに関するドキュメントはないようです。
では、そのドキュメントはどこにあり、OPcache をどのように使用すればよいでしょうか?
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
免責事項私はこのプロジェクトの作者です
特徴:
スクリーンショット:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-ステータス
特徴:
スクリーンショット:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
特徴:
スクリーンショット:
OPcache は APC モジュールを置き換えるように設計されているため、PHP でそれらを並行して実行することはできません。どちらもコードの記述方法には影響しないため、これは PHP オペコードをキャッシュするのに適しています。
ただし、現在 APC を使用して (apc_store()
関数を介して) 他のデータを保存している場合、OPCache を使用することにした場合、それを行うことができなくなります。
共有 PHP メモリにデータを保存するAPCuやYacなどの別のライブラリを使用するか、PHP とは別のプロセスでメモリにデータを保存する memcached のようなライブラリを使用するように切り替える必要があります。
また、OPcache には、APC にあるアップロード進行状況メーターに相当するものはありません。代わりに、Session Upload Progressを使用する必要があります。
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 など) が壊れる可能性があります。
opcache を使用するため、2 セントを投じます。
データベースと通信できるように、多くのフィールドと検証メソッドと列挙型を備えた広範なフレームワークを作成しました。
opcache なし
このスクリプトを opcache なしで使用し、2.8 秒で 9000 のリクエストを Apache サーバーにプッシュすると、すべてのリクエストに追いつくまで 70-80 秒間 90-100% の CPU で最大になります。
Total time taken: 76085 milliseconds(76 seconds)
opcache が有効になっている場合
opcache を有効にすると、約 25 秒間 25 ~ 30% の CPU 時間で実行され、25% の CPU 使用率を超えることはありません。
Total time taken: 26490 milliseconds(26 seconds)
すべて静的で機能の変更を必要としないフレームワークを除くすべてのキャッシュを無効にする opcache ブラックリスト ファイルを作成しました。キャッシュ ファイルのリロード/検証を気にせずに開発できるように、フレームワーク ファイルのみを明示的に選択します。すべてをキャッシュすることで、リクエストの合計を 1 秒節約できます25546 milliseconds
これにより、サーバーが汗をかくことなく、1 秒あたりに処理できるデータ/リクエストの量が大幅に増加します。
Amazon Linux で PHP 5.6 を使用する場合 (RedHat または CentOS でも同じはずです):
yum install php56-opcache
そしてApacheを再起動します。
これは、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