PHP 5.5がリリースされ、OPCacheと呼ばれる新しいコードキャッシングモジュールを備えていますが、そのドキュメントはありません。
それで、そのドキュメントはどこにあり、OPcacheをどのように使用しますか?
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-status
特徴:
スクリーンショット:
URL:https : //github.com/rlerdorf/opcache-status
opcache-gui
特徴:
スクリーンショット:
OPcacheはAPCモジュールを置き換えるように設計されているため、PHPでそれらを並行して実行することはできません。コードの記述方法には影響しないため、これはPHPオペコードのキャッシュに適しています。
ただし、現在APCを使用して(apc_store()
関数を介して)他のデータを格納している場合、OPCacheを使用することを決定すると、それを実行できなくなります。
APCuやYacなどの別のライブラリを使用する必要があります共有のPHPメモリにデータを格納するを使用するか、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サーバーにプッシュすると、すべてのリクエストに追いつくまで、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秒あたりに処理できるデータ/要求の量が大幅に増えます。
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ファイルに入力します。しかし、これは私が使用したものです。ほとんどがデフォルトのもの
opcache.revalidate_freq=60;
ファイルがメモリ内に存続できる時間を秒単位で決定します。時間切れになるとファイルを再コンパイルします。
opcache.revalidate_freq
は、スクリプトの変更をチェックする頻度を制御します(タイムスタンプが変更されたかどうかに基づいて)。そのため、スクリプトのタイムスタンプが最後にコンパイルされたときと同じ場合、スクリプトは再コンパイルされません。これはすべて、opcache.validate_timestamps
デフォルトで有効になっている設定を変更していないことを前提としています。
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
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146