検索

PHP プロジェクト、特に同時実行性が高くトラフィックが大きいシナリオでは、PHP の応答時間をいかに改善するかが非常に重要なタスクです。

Opcache は、特に PHP フレームワークを適用するプロジェクトにおいて、PHP のパフォーマンスを最適化するために不可欠なコンポーネントです。

1. 概要

OPCache 関数を理解する前に、まずPHP-FPM を理解する必要があります。 Nginx の動作メカニズム、および PHP スクリプトの解釈と実行のメカニズム。

1.1 PHP-FPM Nginx の動作メカニズム

リクエストは Web ブラウザから Nginx に送られ、その後 PHP 処理に送られます。全体のプロセスは次のとおりです。 5 つのステップ:

ステップ 1: サービスの開始

  • PHP-FPM を開始します。 PHP-FPM は、TCP ソケットと Unix ソケットの 2 つの通信モードをサポートします。
  • PHP-FPM は 2 種類のプロセスを開始します: マスター プロセス前者はポートの監視、タスクの割り当て、ワーカー プロセスの管理を担当し、後者は PHP CGI プログラムで、PHP スクリプトの解釈、コンパイル、実行を担当します。
  • Nginx を起動します。 まず、ngx_http_fastcgi_module モジュールがロードされて、FastCGI 実行環境を初期化し、FastCGI プロトコル リクエスト プロキシを実装します。
  • ここで注意してください: fastcgi ワーカー プロセス (cgi プロセス) は、によって管理されます。 PHP-FPM。Nginx ではありません。 Nginx は単なるプロキシです

第 2 ステップ: リクエスト => Nginx

  • Nginx はリクエストを受信し、場所に基づいて適切なハンドラを選択します設定
  • これはプロキシ PHP のハンドラーです

##3 番目のステップ: Nginx => PHP-FPM

    Nginxリクエストを変換します Fastcgi request
  • TCP ソケット/Unix ソケット経由で PHP-FPM マスター プロセスに送信します

ステップ 4: PHP-FPM マスター => ワーカー

    PHP-FPM マスター プロセスがリクエストを受信します
  • PHP スクリプトを実行するワーカー プロセスを割り当てます。
  • アイドル状態のワーカーがない場合、502 エラーが発生します戻り値
  • ワーカー (php-cgi) プロセスが PHP スクリプトを実行します。
  • タイムアウトになると、504 エラーが返されます #処理が完了し、結果が返されます
ステップ 5: PHP-FPM ワーカー => マスター => Nginx

PHP-FPMワーカープロセスは処理結果を返し、コネクションを閉じる次のリクエストを待つ
  • PHP-FPMマスタープロセスはSocket経由で処理結果を返す
  • Nginxハンドラーはそれぞれを順次送信最初のフィルタへの応答バッファ → 2 番目 → というように → 最後に 応答がクライアントに送信されます
#1.2 PHP スクリプトの説明と実行の仕組み

#PHP Nginx の全体的な処理の流れを理解したら、次は PHP スクリプトの具体的な実行プロセスを見てみましょう。##最初に例を見てみましょう:

えええええ

実行プロセスを分析してみましょう:

  • php は実行リンクを初期化し、Zend エンジンを開始します、登録された拡張モジュールをロードします

  • 初期化後、スクリプト ファイルが読み取られ、Zend エンジンはスクリプト ファイルに対して字句解析 (lex)、構文解析 (bison) を実行し、構文ツリー

  • Zend エンジンが構文ツリーをコンパイルし、オペコードを生成します#、

  • Zend エンジンオペコードを実行#、実行結果を返す

  • #PHP cli モードでは、PHP スクリプトが実行されるたびに、 4 つのステップが順番に実行されます。

PHP-FPM モードでは、ステップ 1) は PHP-FPM の開始時に 1 回実行され、後続のリクエストでは実行されません。ステップ 2) ~4) はリクエストごとに 1 回実行する必要があります実際、ステップ 2) と 3) で生成された構文ツリーとオペコードは、同じ PHP スクリプトを実行するたびに同じ結果になります。

PHP-FPM モードの場合 次に、各リクエストを再度処理する必要がありますが、これはシステム リソースの多大な無駄になります。

もちろん、次のようなものです:

OPCache: 以前は Zend Optimizer として知られていましたが、これは Zend Server のオープン ソース コンポーネントであり、公式製品であり、強く推奨されます
  • APC: Alternative PHP Cache はオープンで無料の PHP オペコード キャッシュ コンポーネントであり、PHP 中間コードのキャッシュと最適化に使用されます。現在は更新されておらず、推奨されていません
  • APCu: APC のブランチであり、メモリを共有します、ユーザー データをキャッシュし、オペコードをキャッシュできません。Opcache とともに使用できます。
  • eAccelerate: こちらも更新されず、推奨されません
  • xCache: 推奨されなくなりました
2. OPCache の概要

OPCache は、Zend によって公式に作成されたオープンで無料のオペコード キャッシュ拡張機能であり、コード最適化機能も備えており、毎回の PHP スクリプトの読み込みと解析のオーバーヘッドを排除します。

OPcache 拡張機能は、PHP 5.5.0 以降のバージョンにバンドルされています。

2 種類のコンテンツをキャッシュします:

OPCode
  • コメント、変数名などの内部文字列。
  • # #3. OPCache の原理

#OPCache キャッシュの主なメカニズムは次のとおりです:#コンパイルされたオペレーション コードを共有メモリに置き、他のプロセスにアクセスできるように提供します## #。

これにはメモリ共有メカニズムが関係します。また、すべてのメモリ リソース操作にはロックの問題があります。1 つずつ説明します。 3.1 共有メモリ

UNIX/Linux システムには、プロセス間でメモリを共有するためのさまざまな方法が用意されています。 -V shm API: System V 共有メモリ、sysv shm は永続的です。プロセスによって明示的に削除されない限り、システムがシャットダウンされるまで常にメモリ内に存在します;

mmap API:

    mmap によってマッピングされたメモリは永続的ではありません。事前にファイルにマッピングされていない限り、プロセスが閉じられるとマッピングは無効になります。メモリ マッピング メカニズム mmap は POSIX 標準システム コールです。匿名マッピングとファイル マッピングの 2 つのタイプがあります。
    • mmap の大きな利点の 1 つは、ファイルをプロセスのアドレス空間にマッピングすることです。
    • データをユーザー バッファからカーネル ページ キャッシュ バッファのコピー プロセスに転送する必要がなくなります。
  • もちろん、もう 1 つの利点は、頻繁な読み取り/書き込みシステム コールが必要ないことです
    • #POSIX API: System V 共有メモリは時代遅れです。POSIX 共有メモリは、より使いやすく、より合理的に設計された API を提供します。
    • Unix ソケット API
    • OPCache は、構成またはデフォルトの mmap メモリ共有モードに応じて、最初の 3 つの共有メモリ メカニズムを使用します。
    • PHP バイトコード キャッシュのシナリオに基づいた OPCache のメモリ管理設計は非常にシンプルで、読み取りと書き込みが高速で、メモリ解放がなく、期限切れのデータは無駄に設定されます。
  • 無駄なメモリが設定値より大きい場合、OPCache メカニズムが自動的に再起動され、キャッシュがクリアされて再生成されます。
#3.2 ミューテックス ロック

メモリ リソースの操作にはロック メカニズムが関係します。

共有メモリ: 単位時間内に書き込み操作を実行できるのは 1 つのプロセスのみであり、読み取り操作を実行できるのは複数のプロセスです。書き込み操作は同時に実行され、読み取られます。操作がブロックされないため、ロックされる状況はほとんどありません。

これは別の問題を引き起こします: 新しいコード、大規模なトラフィックのシナリオ、プロセスはキャッシュ オペコード操作を実行するためにキューに入れられ、繰り返しの書き込みはリソースの無駄につながります。

4. OPCache キャッシュの解釈

OPCache は公式の Opcode キャッシュ ソリューションで、PHP5.5 バージョン以降は PHP ソース コードにパッケージ化され、一緒にリリースされています。

PHP のコンパイルによって生成されたバイトコードとデータを共有メモリにキャッシュし、リクエストごとに、コンパイルされたオペコードがキャッシュから直接読み取られて実行されます。

スクリプトのコンパイルプロセスを節約することで、PHP の実行効率を向上させます。

同じジョブを実行するために APC 拡張機能を使用している場合、特に PHP7 では、代わりに OPCache を使用することが強く推奨されます。

4.1 OPCode キャッシュ

Opcache は OPCode と次のコンテンツをキャッシュします:

  • PHP スクリプトに関連する関数
  • PHP スクリプトで定義されたクラス
  • PHP スクリプト ファイルのパス
  • PHP スクリプト OPArray
  • PHP 構造/スクリプト自体の内容

4.2 インターンされた文字列キャッシュ

まず、インターンされた文字列とは何なのかを理解する必要があります。

PHP5.4 では、PHP の文字列のストレージと処理を最適化するために、Interned String メカニズムが導入されました。

特に、PHP ドキュメントなどの大きな文字列チャンクを扱う場合、Interned String はメモリを最適化できます。

Interned String キャッシュされたコンテンツには次のものが含まれます: 変数名、クラス名、メソッド名、文字列、コメント など。

PHP-FPM モードでは、インターンされた文字列キャッシュ文字はワーカー プロセス内に限定されます。

OPCache にキャッシュされた Interned String キャッシュされた文字列は、ワーカー プロセス間で使用してメモリを節約できます。

PHP 開発では通常、大きなコメントがあり、それらも OPCache にキャッシュされます。 php.ini の設定を通じてコメントのキャッシュをオフにすることができます。

ただし、Zend Framework などのフレームワークでは

がコメントを参照するため、コメントのキャッシュをオフにするかどうかは別の方法で扱う必要があります。

5. OPCache 更新戦略

はキャッシュであり、有効期限と更新戦略があります。

OPCache の更新戦略は非常にシンプルで、期限切れのデータは「Wasted」に設定され、設定値に達するとキャッシュがクリアされ、キャッシュが再構築されます。

ここで注意してください:

高トラフィックのシナリオでは、キャッシュの再構築は非常に多くのリソースを消費します。 OPCache は、キャッシュの作成時に他のプロセスによる読み取りを妨げません。

これにより、多数のプロセスが新しいキャッシュを繰り返し作成することになります。したがって、

OPCache の有効期限を設定しないでください。新しいコードがリリースされるたびに、キャッシュが繰り返し作成されます。それを避けるにはどうすればよいでしょうか?

  • ピーク期間にはコードをリリースしないでください、これはどのような状況でも従うべきルールですコードのウォームアップスクリプトは PHP アクセス URL をバッチで調整するか、コンパイルとキャッシュに
  • opcache_compile_file()
  • などの OPCache によって公開される API を使用します
6。OPCache構成

6.1 メモリ構成

#opcache.preferred_memory_model="mmap"
    OPcache の優先メモリモジュール。空白のままにすると、OPcache が該当するモジュールを選択します。通常は自動選択で十分です。オプションの値には、
  • mmapshmposix、および win32 が含まれます。 opcache.memory_consumption=64
  • OPcache の共有メモリ サイズ (メガバイト単位、デフォルト)
  • 64M#opcache.interned_strings_buffer =4一時文字列の保存に使用されるメモリ サイズ (メガバイト単位)、デフォルト
  • 4M
  • ##opcache.max_wasted_percentage=5 無駄なメモリの上限 (パーセント単位)。この制限に達すると、OPcache は再起動イベントを生成します。デフォルト
  • #6.2 キャッシュできるファイルの数とサイズ

opcache .max_accelerated_files=2000 OPcache ハッシュ テーブルに保存できるスクリプト ファイルの最大数。実数値は、素数セット

{ 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 }
    内で見つかった、セット以上の最初の素数です。価値。設定値の最小値の範囲は
  • 200、最大値は PHP 5.5.6 より前では 100000、PHP 5.5.6 以降では 1000000 です。デフォルト値 2000opcache.max_file_size=0 キャッシュされたファイルの最大サイズ (バイト単位)。すべてのファイルをキャッシュするには 0 に設定します。デフォルト値 0
  • 6.3 コメント関連キャッシュ

opcache.load_comments

boolean
    無効にすると、ファイルにコメントが含まれていても、コメントの内容は読み込まれません。このオプションを
  • opcache.save_comments と組み合わせて使用​​すると、コメントのコンテンツをオンデマンドで読み込むことができます。 opcache.fast_shutdown boolean 有効にすると、高速停止再開イベントが使用されます。いわゆるクイック停止再開イベントは、割り当てられた各メモリ ブロックを順番に解放するのではなく、Zend エンジンに依存して、要求されたすべての変数のメモリを一度に解放するメモリ管理モジュールを指します。
  • #6.4 2 次キャッシュ構成
#
  • opcache.file_cache 2 次キャッシュ ディレクトリを構成し、2 次キャッシュを有効にします。 2 次キャッシュを有効にすると、SHM メモリがいっぱいになった場合、サーバーが再起動された場合、または SHM がリセットされた場合のパフォーマンスが向上します。デフォルト値は空の文字列 "" で、ファイルベースのキャッシュが無効になります。
  • opcache.file_cache_only boolean 共有メモリ内のオペコード キャッシュを有効または無効にします。
  • opcache.file_cache_consistency_checks boolean ファイル キャッシュからスクリプトをロードするときにファイルのチェックサムを検証するかどうか。
  • opcache.file_cache_fallback boolean Windows プラットフォームでは、プロセスが共有メモリに接続できない場合、ファイルベースのキャッシュ、つまり opcache が使用されます。 file_cache_only=1。ファイル キャッシュは明示的に有効にする必要があります。

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP Opcache の仕組みの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はawaimaiで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。Apr 17, 2025 am 12:22 AM

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール