クラウド知恵視点宝PHPアプリケーションパフォーマンス監視の実装原理
クラウドウィズダムニーク
ワン。 PHP アプリケーション シナリオ
1994 年の作成以来、PHP は、つまらない「個人用ホームページ ツール」から「PHP: ハイパーテキスト プリプロセッサ」へと進化してきました。同時に、その強力なスケーラビリティと機敏な反復特性に基づいて、基本的には次のような特徴を持っています。インターネット技術になる この企業の重要な言語は、インターネットの発展を促進する強力な推進力を着実に提供します。
同時に、PHP をベースにしたオープンソース ソフトウェアや開発フレームワーク (WordPress、Zend Framework、Laravel、Yaf、Hiphop などの優れたもの) も絶えず開発されており、PHP は他の企業でも大規模に使用されています。インターネット企業よりもエンタープライズレベルのアプリケーション開発言語のリストを入力してください。
2つ。ユーザー監視のニーズ
PHP の敷居が低く、反復が速いため、さまざまな理由で多くのプロジェクトの構造が不明確になることがわかっています。1. プロジェクトがアウトソーシング チームから引き継がれる。歴史的な問題は元に戻ることが困難です。
4. とにかくパフォーマンスが非常に悪く、ますます制御不能になっています。
ただし、次のような理由により、問題をデバッグすることが不可能または困難です。 1. 時間 あまりにも長すぎて書き方を忘れてしまいました
2. データが作成できないため、ロジックに到達できず、再現できません
3.私のチームが開発したアーキテクチャとコードはとても恥ずかしくて嫌なものです。
図 1: PHP アプリケーション システムの実行モデル
PHP の実行フェーズは、次の 3 つのフェーズに大別できます。最終的な実行のためにそれらを Execute に渡します。 Op Code は中間コードであり、Zend Engine によって呼び出されて実行されます。
実際、PHP が Java に似ていることを理解するのは難しくありません。どちらも中間コードを生成し、それぞれの「仮想マシン」上で実行します。しかし、PHP のパフォーマンスが Java、.NET、Go と大きく異なるのはなぜでしょうか。 ?
一言で言えば、一般に「PHP はインタプリタ言語である」と思われているのは、実際には厳密ではなく、実行されるたびにコンパイルされるということです。また、最も深刻な問題は、並列処理を実現するのが難しいことです。 . 計算 (「難しい」とだけ書かれていることに注意してください。並列計算に PHP を使用するための解決策は複数あります)。 Op コードの存在に基づいて、OpCache、Apc、Apcu、Xcache など、PHP アプリケーションの実行パフォーマンスを効果的に向上させるキャッシュ ツール拡張機能が多数誕生しました。
PHP を使用して開発された Web サイト、インターフェイス、およびアプリケーション システムの場合、パフォーマンスのボトルネックはどこにありますか? PHP アプリケーションのパフォーマンスの最適化を行った友人は、再帰、ループ、リソース操作、リソースの解放などがすべて一般的なボトルネック ポイントであることを知っています。詰まりやロックの原因となります。
CPU、メモリ、さまざまな I/O、さまざまなネットワーク帯域幅などの消費が、パフォーマンスのボトルネックの中で最優先事項であると結論付けることができます。これは、単純に次のように要約できます: 外部サービス (サードパーティ API など)。 、リソース読み取り書き込み、コード例外。
これらの問題に対処する一般的な方法は、Xhprof、Xdebug、PHP-trace などのツールを使用して調査し、アーキテクトや上級エンジニアの経験に基づいて対処することです。方法には、シングルトン、トランザクション、オンデマンド読み込みが含まれます。 、短いトランザクション、タイムリーなリリースなどです (ほとんどの企業や開発者にとって、パフォーマンスの問題に遭遇する最も一般的な方法は、盲目的に推測して頭を悩ませることです)。
問題が発生して明確になってからテスト環境や本番環境でしか対処できないことが一目で分かりますが、テスト環境なら問題はありませんが、本番環境であれば後処理で改善できます。 、問題のほとんどは、苦情やビジネスのより深刻な損失を引き起こす機能障害によるものです。
実稼働環境で起こり得るパフォーマンスの問題をできるだけ早く発見または回避できるように、既知または未知の障害サイトを正確に記録します。この 2 点がアプリケーションのパフォーマンス管理において緊急のニーズとなっています。
3つ。 PHP モニタリング実装の原則図 2 フックの使用図
PHP 操作によってサポートされる Zend エンジンは、設計プロセスですでに豊富なフックを予約しており、これが処理のいくつかの重要なポイントに効果的に干渉する可能性があります。プロセスステップ。
もちろん、Cloud Wisdom Perspective の PHPAgent の開発と実装は、アプリケーション システムの元のコードに影響を与えることはできません。そのため、最も簡単で効果的な方法は、PHPAgent が次のフックを使用することです。
分析ファイルや文字列のロード自体が非常に大きな IO を引き起こします。ロードが多すぎると、間違いなくメモリと CPU の消費が発生します。これらの 2 つのフックを通じて、ファイル名、実行行数、およびメモリ使用量を取得できます。とCPU使用時間。
2. zend_execute と zend_execute_internal これら 2 つのフックを使用することで、PHP アプリケーションのクラス呼び出し、メソッド呼び出し、メソッド パラメーター、メモリ使用量、CPU 使用量を正確に分析し、動作中のアプリケーション システムのパフォーマンスを正確に取得できます。メソッド実行スタック、API 呼び出しアドレス、SQL ステートメント、キャッシュ キー、キャッシュ ヒットなどの情報。 3. zend_throw_Exception_hook 例外フックを使用すると、例外が発生したクラスメソッドの位置、パラメータ、例外コード、例外メッセージなど、アプリケーションシステムの動作中に発生する例外情報を正確に取得できます。 。 4. zend_error_cb エラーフックはより直接的で、システムの動作中に発生する警告、コードエラー、または構文エラーを正確に取得できます。 図 3 PHPAgent の登録とアプリケーションのフック プロセス 図 4 zend_execute フックのアプリケーション図 (疑似コード) 上の図は、データ収集に zend_execute フックを使用する方法を大まかに説明しています。まず、メソッド名を取得します。同時に、ルール フィルタリング エンジンを通じて、どのメソッドに注目するかしないか (クラス メソッドのブラック リストとホワイト リスト) を決定し、AGENT_BEGIN マクロを使用してメソッドの開始時刻、メソッド名、行番号、メモリ開始時間を記録します。 zend_execute の後、終了時刻とメモリの終了ポイントが AGENT_END マクロを通じて記録されます。 上記のフックの適用を通じて、クラスメソッドの実行順序、実行時間、メモリ使用量、インターフェイス DB とその他のリソース接続、SQL ステートメントと実行時間など、関心のあるインジケーター データをすでに取得できます。 厳密なストレス テストと運用環境の展開の実践後、元のアプリケーション システムに対する PHPAgent のパフォーマンスへの影響は、いくつかのパラメーターを調整するとさらに低く抑えられます。 1.例外フックの開始 2. エラーフックを開始するかどうか 4. スタックトレースを有効にするかどうか 5. ブラックアンドホワイトリスト(URLHeaderCookieRequest Params)を使用するかどうか PHPAgent は SmartAgent プラグイン仕様に準拠しているため、すべては SmartAgent のインストールと展開から始まります。 1. Cloud Wisdom Perspective Bao の公式 Web サイト: https://www.toushibao.com/ にログインし、ページ右上隅のナビゲーションで「無料トライアル」をクリックし、正しく入力した後、無料トライアルお申し込み情報を入力すると、以下のダイアログボックスが表示されますので、同時にアクティベートしてください。メールボックスにメールが自動送信されますので、手順に従ってアカウントを登録してください。 2. 登録が成功したら、Pivot にログインし、 をクリックし、設定ページでスマート エージェントをダウンロードしてインストールします。インストールが正常に完了すると、スマート エージェントはシステム構成に基づいてホスト情報を自動的に取得し、約 2 分後に「ホスト → サーバー」で CPU、メモリ、ネットワーク カード、ディスク、プロセスなどのサーバーのパフォーマンス データを表示できるようになります。モジュール。 3. アプリケーションのランタイム コード、ホスト サービス、およびデータベースのパフォーマンス データを監視する場合は、スマート エージェントが提供するさまざまなプラグインをさらにインストールして設定する必要があります。これは、スマート エージェントがオープン プラグインを実装しているためです。各ランタイム コード、サービス、データベースの構造、監視は、対応するプラグインを通じて実装されます。 3.スマート エージェントをインストールすると、ロード プロセス中にアプリケーションのコンポーネントが自動的に検出されます。PHP 環境が自動的に検出されない場合は、PHPAgent を手動で追加することもできます。上の図に示すように、「管理」入口をクリックして「プラグイン管理」に入り、ページの下部にある「サービスの追加」をクリックし、PHPAgentを選択して「作成」をクリックします。 作成後、「ON」をクリックします。 (この ON 操作は、今後収集される情報をユーザーに正しく送り返すことができるように、ユーザーの情報を初期化するだけです。) 4.もちろん、すでに PHPAgent をインストールしている場合は、この管理インターフェイスで直接アップグレードおよびダウングレードすることもできます。 インストールプロセススクリプトは、インストール whereisphp を検索します。 PHP をコンパイルしてインストールする場合は、スクリプト内の APPD_PHP_PATH 変数の値を PHP bin ディレクトリ (/usr/local/php-5.5.14/bin など) に割り当ててください。 PHPAgent/install.sh インストール開始コマンドを実行します。 6. 再起動Web サーバー PHPアプリケーションデータを表示 おめでとうございます!この時点で、設定は完了しています。アプリケーションに通常のアクセス権がある場合は、「アプリケーション」モジュールでアプリケーション データを表示できます。 5つ。 Perspective Bao の PHP 監視機能の特徴 機能の面では、PHP を監視する場合でも、Java や .NET などの他の主流言語を監視する場合でも、Perspective Bao には次のものが含まれます。要素の実行数、期間および占有時間の割合を表示します。リクエストの応答ステータス、リンク ページ、特定のリクエスト パラメータ、および返された結果を含む、コード実行スタックの詳細なツリー情報を表示します。各メソッドの消費時間と呼び出し回数。特別な識別を使用して、最も遅いメソッドを直接確認できます。3 番目に、合計 SQL 実行時間、実行数、特定のクエリ ステートメントなど、SQL ステートメントに関連する合計時間のかかるソートを表示します。パーティの API 呼び出し。 上の図は、PHPAgent によって検出されたアプリケーションのリソース トポロジとリクエスト応答の概要です。 上の図は、散布棒円グラフを使用して、一定期間内の PHP アプリケーションのリクエスト応答時間の分布を表しています。どのリクエストに問題があるかが一目でわかります。 単一リクエスト トランザクションのトポロジとコード実行スタックを正確に分析できます: 以下は、一定期間にわたってアプリケーション内の PHPAgent によって検出された Mysql リソース操作の分析です。 特定のクラスターのアプリケーションに基づいて、PivotView は一般的なトポロジを自動的に識別して描画できます。もちろん、特定されたアプリケーション サイト トポロジをグループ化して強調表示することもできます。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

Restapiの設計原則には、リソース定義、URI設計、HTTPメソッドの使用、ステータスコードの使用、バージョンコントロール、およびHATEOASが含まれます。 1。リソースは名詞で表され、階層で維持される必要があります。 2。HTTPメソッドは、GETを使用してリソースを取得するなど、セマンティクスに準拠する必要があります。 3.ステータスコードは、404など、リソースが存在しないことを意味します。 4。バージョン制御は、URIまたはヘッダーを介して実装できます。 5。それに応じてリンクを介してhateoasブーツクライアント操作をブーツします。

PHPでは、Try、Catch、最後にキーワードをスローすることにより、例外処理が達成されます。 1)TRYブロックは、例外をスローする可能性のあるコードを囲みます。 2)キャッチブロックは例外を処理します。 3)最後にブロックは、コードが常に実行されることを保証します。 4)スローは、例外を手動でスローするために使用されます。これらのメカニズムは、コードの堅牢性と保守性を向上させるのに役立ちます。

PHPの匿名クラスの主な機能は、1回限りのオブジェクトを作成することです。 1.匿名クラスでは、名前のないクラスをコードで直接定義することができます。これは、一時的な要件に適しています。 2。クラスを継承したり、インターフェイスを実装して柔軟性を高めることができます。 3.使用時にパフォーマンスとコードの読みやすさに注意し、同じ匿名のクラスを繰り返し定義しないようにします。
