PHPのOpcacheとは何ですか? Opcache の原理と使用法の概要

不言
リリース: 2023-04-04 13:22:01
転載
15294 人が閲覧しました

この記事の内容は、php の Opcache とは何ですか? Opcache の原理と使い方の紹介は一定の参考価値があるので、困っている友人は参考にしていただければ幸いです。

1.個人的な実践により、opcache

最近、ダブルイレブン中の高トラフィックの影響に対処するために、編集者はストレス テストを使用してサーバーを見つけました。当時、QPS
はそれほど高くありませんでしたが、CPU とメモリの消費量が非常に多く、特に CPU 消費量が 100% で、コンテナとサーバーの構成はほぼ 100 にアップグレードされました。トップレベル。これは、そのような優れたサーバーが行うべきことではありません。そのため、エディターは包括的な調査を実施しました:

1. インターフェイスのデータベース クエリ部分を表示します。この部分はキャッシュされており、 redis はそれほど高くありません。これにより、データベースとキャッシュのパフォーマンスに影響を与える要因が排除されます。;

2. パフォーマンスに影響を与える他の外部呼び出しがあるかどうかを確認してください。データのこの部分が問題であることがわかります。データベースとキャッシュのみでの取得なので除外;

3. インターフェイスプログラムのコードに複雑な問題がないか確認し、論理計算の結果、この部分で処理したデータは処理された直後にキャッシュされます。一定期間のデータ ソースは Redis キャッシュであったため、除外されました

4. インストールされているため、インターフェイスのボトルネックを引き起こす可能性があるものは排除されました。その後、最も可能性が高いのは、現在使用されているlaravel5.0フレームワークはインターフェースのパフォーマンスが非常に低いため、フレームワークのドキュメント、ソースコード、オンライン資料から、laravelフレームワークは実行時に大量のフレームワークファイルをロードし、これらをコンパイルすることがわかります。ファイルを使用すると、サーバーの CPU 消費量が非常に多くなります。この指示を通じて、編集者は、PHP コンパイル済みファイルをキャッシュするための優れた PHP 拡張機能である opcache を発見しました。

2. opcache の原理

1. opcache とは何ですか?

Opcache は、解析された PHP スクリプトのプリコンパイルされたバイトコード (Operate Code) を共有メモリに保存することで、毎回 PHP スクリプトを読み込んで解析するオーバーヘッドを回避する方法であり、パーサーは共有メモリから直接読み取ることができます。キャッシュされたバイトコード (Operate Code) を読み取ることで、PHP の実行効率が大幅に向上します。

2. オペレートコードとは何ですか?

インタプリタはスクリプト コードの分析を完了すると、直接実行できる中間コード (オペレーション コード (Operate Code、opcode) とも呼ばれます) を生成します。オペコード キャッシュの目的は、コンパイルの繰り返しを回避し、CPU とメモリのオーバーヘッドを削減することです。動的コンテンツのパフォーマンスのボトルネックが CPU やメモリではなく、データベース クエリによって引き起こされるディスク I/O オーバーヘッドなどの I/O 操作にある場合、オペコード キャッシュのパフォーマンス向上は非常に限られます。ただし、オペコード キャッシュは CPU とメモリのオーバーヘッドを削減できるため、これは常に良いことです。最新のオペコード キャッシュ (オプティマイザー、APC2.0 など) はストレージとして共有メモリを使用し、実行前にコードを「逆シリアル化」することなく、共有メモリからファイルを直接実行できます。これにより、パフォーマンスが大幅に向上し、特に高トラフィックおよび同時実行性が高い場合に全体的なサーバー メモリ消費量が削減されることが多く、欠点はほとんどありません。

3. オペコード キャッシュを使用する理由は何ですか?

これは PHP コードのライフ サイクルから始まります。PHP スクリプトをリクエストすると、次の図に示すように 5 つのステップが実行されます:

PHPのOpcacheとは何ですか? Opcache の原理と使用法の概要

Zend エンジンは、ファイル システムからファイルを読み取り、その辞書と式をスキャンし、ファイルを解析し、実行するコンピューター コード (オペコードと呼ばれる) を作成し、最後にオペコードを実行する必要があります。 。 PHP スクリプトがリクエストされるたびに、上記の手順が 1 回実行されます。PHP ソース コードが変更されない場合、オペコードも変更されません。明らかに、毎回オペコードを再生成する必要はありません。ユビキタス キャッシュと組み合わせると、 Web のメカニズムでは、オペコードをキャッシュすることができます。将来的には、キャッシュされたオペコードに直接アクセスした方が速いのではありませんか? オペコード キャッシュを有効にした後のフローチャートは次のとおりです:

PHPのOpcacheとは何ですか? Opcache の原理と使用法の概要

したがって、「操作コードがキャッシュされた後」を使用すると、PHP コードはオペコードを直接取得して直接実行します。中間の 3 つのステップが省略され、大幅にPHP コード実行の効率を向上させます。

3. Opcache のインストールと使用方法

1. インストール

当你的PHP版本低于7.0时,你可以去http://pecl.php.net/package/ZendOpcache 根据自己的PHP版
本下载相应的opcache版本。比如PHP5.5:http://pecl.php.net/get/zendopcache-7.0.5.tgz
tar -zxvf zendopcache-7.0.5.tgz
cd zendopcache-7.0.5
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
这是会在php的扩展文件夹内生成opcache.so
PHP7.0之后自带opcache.so无需安装
ログイン後にコピー

2. 使用

 在php.ini加入zend_extension=opcache.so;
 注意:这里是zend_extension不是extension,关于zend_extension和extension的区别可以去查阅
 相关资料
ログイン後にコピー

3. 構成

关于opcache的详细参数配置比较核心的参数如下:
opcache扩展位置
zend_extension=opcache.so
启用opcache
opcache.enable=1
使用共享内存大小
opcache.memory_consumption=200
字符串缓存大小
opcache.interned_strings_buffer=8
最大缓存文件数量
opcache.max_accelerated_files=8000
出现异常,立即释放全部内存
opcache.fast_shutdown=1
最大允许占用内存百分比,超过此限制会重启进程
opcache.max_wasted_percentage=20
如果置为1,则将当前路径加入到文件key中,以避免可能产生的同文件名的文件key冲突
opcache.use_cwd=1
文件检测周期
revalidate_freq=3600
启用文件缓存时间戳
opcache.validate_timestamps=1
ログイン後にコピー

以上がPHPのOpcacheとは何ですか? Opcache の原理と使用法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート