web-dev-qa-db-ja.com

使い方 PHP OPCache?

PHP 5.5がリリースされ、それはOPCacheと呼ばれる新しいコードキャッシングモジュールを特徴とします、しかしそれのための少しのドキュメントもないようです。

それでは、それに関する文書はどこにあり、OPcacheをどのように使用しますか?

239
Danack

Installation

OpCacheはデフォルトでPHP5.5以降でコンパイルされています。ただし、デフォルトでは無効になっています。 PHP 5.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を実行するもの)に影響するため、 "通常の" extensionディレクティブの代わりにzend_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のリセット
  • キャッシュスクリプトの概要
  • キャッシュされたスクリプトの無効化
  • 多言語
  • モバイル機器のサポート
  • 光沢のあるグラフ

スクリーンショット:

status

cached-scripts

graphs

mobilr

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

opcache-status

特徴:

  • OpCacheのステータス
  • OpCacheの設定
  • OpCacheの統計
  • キャッシュスクリプトの概要
  • 単一ファイル

スクリーンショット

status

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

opcache-gui

特徴:

  • OpCacheのステータス
  • OpCacheの設定
  • OpCacheの統計
  • OpCacheのリセット
  • キャッシュスクリプトの概要
  • キャッシュされたスクリプトの無効化
  • 自動リフレッシュ

スクリーンショット

opcache-gui-overview

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

368
PeeHaa

APcに代わるOPcache

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

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

両方とも共有PHPメモリにデータを保存する APCu または Yac などの別のライブラリを使用するか、メモリにデータを保存するmemcachedのようなものを使用する必要があります。 PHPとは別のプロセスです。

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

OPcacheの設定

OPcacheのドキュメントは here に記載されているすべての設定オプションとともに here にあります。推奨設定は次のとおりです。

; 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など)が壊れる可能性があります。

151
Danack

私はopcacheを使うために2セントを落とすつもりです。

私は自分のデータベースと対話できるようにするために、たくさんのフィールドとバリデーション方法とenumで広範囲のフレームワークを作りました。

opcacheなし

Opcacheなしでこのスクリプトを使用し、私が2.8秒で9000リクエストをApacheサーバーにプッシュするとき、それはすべてのリクエストに追いつくまで70-80秒間90-100%cpuで最大になります。

Total time taken: 76085 milliseconds(76 seconds)

opcacheが有効な場合

Opcacheを有効にすると、25〜30%のCPU時間で約25秒間動作し、25%のCPU使用率を超えることはありません。

Total time taken: 26490 milliseconds(26 seconds)

私はopcacheのブラックリストファイルを作りました。それはすべて静的で、機能の変更を必要としないフレームワークを除いてすべてのキャッシュを無効にします。キャッシュファイルの再読み込みや検証を心配せずに開発できるように、フレームワークファイルだけを明示的に選択します。すべてをキャッシュすることで、リクエストの総数を1秒節約できます25546 milliseconds

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

19
Tschallacka

Amazon Linux上のPHP 5.6の場合(RedHatまたはCentOS上で同じであるべきです):

yum install php56-opcache

その後、Apacheを再起動してください。

4
Roger Dueck

気分を設定するときに私はこれに遭遇しました。 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

2
Anoop Toffy