クラウドウィズダムニーク
ワン。 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 は一般的なトポロジを自動的に識別して描画できます。もちろん、特定されたアプリケーション サイト トポロジをグループ化して強調表示することもできます。