ホームページ  >  記事  >  バックエンド開発  >  PHP Opcache 最適化アクセラレーション

PHP Opcache 最適化アクセラレーション

小云云
小云云オリジナル
2018-03-27 11:53:381566ブラウズ

Opcache は、解析された PHP スクリプトのプリコンパイルされたバイトコードを共有メモリに保存することで、毎回の PHP スクリプトのロードと解析のオーバーヘッドを回避する方法であり、パーサーはキャッシュされたバイトコードを共有メモリから直接読み取ることができるため、実行効率が大幅に向上します。 PHPの。 PS: これは Xcache メカニズムとは区別する必要があり、その使用法については後続の概要で紹介します。

・インストール方法

・設定方法

・使い方

・表示解析

・注意事項

1. インストール方法

PHP 5.5.0以降のバージョンでは、PHPにはOpcacheが含まれています展開する関数 ライブラリ フォームはリリース バージョンに組み込まれており、開発者は php.ini に Opcache 関連の設定を追加または注釈を付ける必要があります。古いバージョンの場合、Opcache を PECL 拡張ライブラリとしてインストールして構成できます。

注:

--disable-all パラメーターを使用してデフォルトの拡張機能のビルドを無効にする場合は、--enable-opcache オプションを使用して Opcache を有効にする必要があります。

2.

php.ini:

[opcache]

; CLI バージョンの PHP のオペコード キャッシュを有効にする方法 (通常はテストとデバッグに使用されます)。

opcache.enable_cli=1

; 共有メモリのサイズ、単位は MB

opcache.memory_consumption=128

; ストレージの一時文字列キャッシュのサイズ、単位は MB、PHP5.3.0 は

opcache .interned_strings_buffer の前にこの設定を無視します。 =8

; キャッシュされるファイル数の最大制限、ヒット率は 100% 未満です。この値を増やすことができます

opcache.max_accelerated_files=4000

;一定の期間、ここでチェック時間を設定します。期間、デフォルトは 2、単位は秒です

opcache.revalidate_freq=60

; Zend エンジンのメモリ管理モジュールに依存して、再送信イベントの迅速な停止を有効にします。メモリブロックを順番に解放するのではなく、すべてのリクエスト変数のメモリを一度に解放します

opcache.fast_shutdown=1

; ファイルがキャッシュされているかどうかに関係なく、PHP スクリプトの存在と可読性をチェックする機能を有効にします。キャッシュがチェックされるため、パフォーマンスが向上します。 ただし無効の場合 opcache.validate_timestamps オプションでは、古いデータが返される危険性があります。

opcache.enable_file_override=1

; 拡張ライブラリのファイル関連読み込み

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/opcache.so

注:

上記の設定項目は一般的に使用される重要な設定項目ですが、実際にはこれらの設定項目だけではありません。

3. 使用方法

実際、Opcache の使用は主に、提供されるいくつかの関数に反映されます。

形式: array opcache_get_configuration(void); 、構成情報、ブラックリスト、バージョン番号を配列形式で返します。

2. opcache_get_status;

形式: array opcache_get_status(void);

設定されたキャッシュのステータス情報を取得します。

3. opcache_invalidate;

形式: boolean opcache_invalidate (文字列); この関数の機能は、指定されたスクリプトのバイトコード キャッシュを無効にすることです。

force

が設定されていない場合、または

FALSE

が渡された場合、スクリプトのキャッシュは、スクリプトの変更時刻が対応するバイトコード時刻よりも新しい場合にのみ無効になります。

4. opcache_reset;

形式: boolean opcache_reset(void);

この関数はバイトコード キャッシュ全体をリセットします。 opcache_reset() を呼び出した後、次回クリックしたときにすべてのスクリプトが再ロードされ、解析されます。 5. opcache_compile_file; 形式: boolean opcache_compile_file (文字列);

スクリプトを実行せずにコンパイルしてキャッシュできます。

6. opcache_is_script_cached

形式: boolean opcache_is_script_cached (string);

スクリプトが Opcache にキャッシュされているかどうかを判断します。

ここで、上記の関数をカプセル化する PHP スクリプトを作成します。これにより、将来の Opcache のメンテナンスと管理も容易になります。詳細は次のとおりです。

<?php
/**
 * 这个文件是对opcache优化器的几个
 * 函数的封装,作为一个工具脚本使用
 */
if(!extension_loaded("ZendOpcache")) {
      echo "You do nothave the Zend OPcache extension loaded , please open it up,then retry!";
}
/**
 * 函数操作封装类
 * 数组形式的结果,会转为json格式返回,不做显示上的处理
 * 这里主要处理的是影响Opcache缓存状态的操作,对于查看
 * Opcache各项指标的处理,可查看项目:opcache-status
 */
class OpcacheScriptModel{
      private $_configuration;
      private $_status;
      function __construct() {
            $this->_configuration =opcache_get_configuration();
            $this->_status =opcache_get_status();
      }
      // 获取配置信息
      public function getConfigDatas(){
            echo json_encode($this->_configuration);
      }
      // 获取状态信息
      public function getStatusDatas(){
            echo json_encode($this->_status);
      }
      // 指定某脚本文件字节码缓存失效
      public function invalidate($script){
            return opcache_invalidate($script);
      }
      // 重置或清除整个字节码缓存数据
      public function reset() {
            return opcache_reset();
      }
      // 无需运行,就可以编译并缓存脚本
      public function compile($file){
            return opcache_compile_file($file);
      }
      // 判断某个脚本是否已经缓存到Opcache
      public function isCached($script){
            return opcache_is_script_cached($script);
      }
}
// 获得对象
function getOpcacheDataModel(){
      // 初始化对象
      $dataModel = NULL;
      if(NULL ==$dataModel) {
            $dataModel = new OpcacheScriptModel();
      }
      return $dataModel;
}
?>

上記のスクリプト ツールは比較的単純で、通常は次の場所に配置できます。実際、次のオープンソース プロジェクトの表示と分析でも、取得したデータをグラフ形式で表示します。より直感的です。読み続けてください。

4. 表示分析

PHP スクリプトの実行メカニズムは、パーサーが PHP スクリプト ファイルを解析してバイトコード データに変換し、Opcache オプティマイザーの役割が解析されたバイトコード データをキャッシュすることであることがわかっています。毎回 PHP スクリプトのロードと解析を繰り返す必要がなく、キャッシュから直接実行できるため、Opcache を使用するには、通常次の 2 つのことだけを行う必要があります:

1. Opcache オプティマイザーを使用して PHP を高速化する プログラムの実行速度を向上させる;

2. Opcache のさまざまなインジケーターとパラメーターを通じて、現在の PHP プログラムのパフォーマンス ステータスをリアルタイムで理解します。答えは、Github 上のオープンソース プロジェクトを使用できることです: https://github.com/rlerdorf/opcache-status

ダウンロードしたプロジェクトを現在の Web サーバーのルート ディレクトリに置き、直接アクセスして効果を確認します。最初に:


上記のスクリーンショットとプロジェクトファイルからわかるように、Opcache ツールは簡略化された GUI バージョンであり、これを使用すると、次の内容を明確に理解して分析できます。使用量、残りのステータス、およびメモリの無駄と割合

2. キャッシュのヒット数とキャッシュミスの数

5.キャッシュ スクリプト ファイルはビュー形式で分割され、直感的に表示されます。Opcache の視覚化については以上です。注意すべき点をいくつか見てみましょう。

5. 注意事項

1. Xcache と Opcache の PHP 最適化を同時に有効にすることはお勧めできません。PHP 5.5.0 以降のバージョンには Opcache のサポートが組み込まれているため、PHP はその重要性を認識しています。 、Xcache などと比較して、サードパーティの PHP オプティマイザーの場合は、Opcache を使用する方が良い選択になります。また、両方が同時に存在すると、Opcache のキャッシュヒット数が大幅に減少し、不要なオーバーヘッドが追加されます。

2. 開発プロセス中に Opcache を有効にすることはお勧めできません。理由は明らかです。Opcache を有効にした後は、opcache.revalidate_freq の影響を受けるため、開発者が変更した内容は表示されず、すぐに反映されません。 =60 であるため、開発中は Opcache をオンにし、テスト後にパフォーマンスをテストするときに再度テストを開くことをお勧めします。 もちろん、運用環境では Opcache を常にオンにする必要があります。

3. Opcache インジケーターを大きく設定しすぎることはお勧めできません

設定サイズや各 Opcache インジケーターを有効にするかどうかは、プロジェクトの実際のニーズと Opcache が公式に推奨する設定を組み合わせる必要があります。プロジェクトの調整は、上記のビジュアル キャッシュ情報分析の調整の 4 番目の部分と組み合わせることができます。

4. 古いバージョンの Opcache を長期間使用することはお勧めしません

Opcache のバグ修正、機能の最適化、新機能をリアルタイムで知るために、Opcache の公式 Web サイトに注意を払うことをお勧めします。 、それを自分のプロジェクトにうまく適用できるようにします。

5. 上記で紹介したオープンソース プロジェクトを運用環境の Web サービスのルート ディレクトリに配置することはお勧めできません。理由は非常に簡単です。このオープンソース プロジェクトにはアクセス制限やセキュリティ処理がないためです。外部からアクセスできる人は誰でもアクセスできる インターネットの利用者は、アクセスアドレスを知っていれば直接アクセスできるため、安全ではありません。一般に、このオープンソース ツールは PHP のパフォーマンスを視覚的に分析するのにのみ役立ち、通常は開発およびデバッグの段階で使用されます。実稼働環境で有効にするだけの場合は、セキュリティ制限を行う必要があります。

関連する推奨事項:

PHP の Opcache アクセラレーションの使用方法を共有する

php での opcache の使用

PHP 最適化アクセラレーションのための Opcache の使用法の概要

以上がPHP Opcache 最適化アクセラレーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。