253

PHP 5.5 がリリースされ、OPCache と呼ばれる新しいコード キャッシング モジュールが搭載されていますが、それに関するドキュメントはないようです。

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

4

5 に答える 5

376

インストール

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-ステータス

特徴:

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

スクリーンショット:

状態

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

opcache-gui

特徴:

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

スクリーンショット:

opcache-gui-概要

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

于 2013-06-25T18:18:12.553 に答える
152

OPcache は APC を置き換えます

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

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

共有 PHP メモリにデータを保存するAPCuYacなどの別のライブラリを使用するか、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 など) が壊れる可能性があります。

于 2013-06-20T22:18:10.207 に答える
20

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 秒あたりに処理できるデータ/リクエストの量が大幅に増加します。

于 2015-02-12T12:04:23.237 に答える
4

Amazon Linux で PHP 5.6 を使用する場合 (RedHat または CentOS でも同じはずです):

yum install php56-opcache

そしてApacheを再起動します。

于 2016-03-03T23:33:48.120 に答える
3

これは、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

于 2015-08-30T19:46:37.947 に答える