目次
はじめに
オプション 2
xhprof をダウンロードしてインストールします
ホームページ バックエンド開発 PHPチュートリアル PHP アプリケーションのパフォーマンス監視と分析の非侵入型監視

PHP アプリケーションのパフォーマンス監視と分析の非侵入型監視

Jun 20, 2016 pm 12:38 PM

はじめに

PHP アプリケーションのパフォーマンスのいわゆる非侵入型監視とは、既存のシステム コードを変更せずにシステムを監視することを意味します。このようなシステムは、PHP アプリケーションにより簡単に適用できます。これは他の人にインスピレーションを与える方法であり、誰でもコミュニケーションをとることができます。

オプション 1

各リクエストのアクセス時間のみを監視する場合。 nginx ログを直接確認してください。 nginx ログには 2 つのオプションがあります。 $request_time と $upstream_response_time 。 どちらのオプションでも応答時間を記録します。

1. $request_time は、ユーザーリクエストの最初のバイトを受け入れてから応答データを送信するまでの時間を指します。これには、リクエストデータを受信する時間、プログラムの応答時間、およびデータを出力する時間が含まれます。応答データ。

2. $upstream_response_time は、Nginx がバックエンド (php-cgi) への接続を確立してから、データを受け入れて接続を閉じるまでの時間を指します。

バックエンド PHP サービスのパフォーマンスのみを監視する場合は、$upstream_response_time オプションに注意してください。

オプション 2

PHP リクエストをさらに処理する必要があり、その特定の部分により多くの時間がかかる場合は、xhprof を使用する必要があります。 xhprof はコール グラフを生成でき、どの部分がより多くの時間を費やしているかを明確に確認できます。以下に示すように (インターネットから):

完全な構築手順は次のとおりです:

xhprof をダウンロードしてインストールします

1. ダウンロードしてコンパイルするコマンド。

$wget https://github.com/phacility/xhprof/archive/master.zip$unzip ./xhprof_master.zip$cd ./xhprof_master/extension$/usr/local/php/bin/phpize$./configure --with-php-config=/usr/local/php/bin/php-config$make$make install
ログイン後にコピー

私の php は /usr/local/php ディレクトリにインストールされていることに注意してください。状況に応じて上記のパスを適切に変更してください。

2. 設定ファイル php.ini を変更します

$vim /etc/php.ini
ログイン後にコピー

以下の内容を下部に追加します:

[xhprof]

extension=xhprof.so

xhprof.output_dir=/tmp/xhprof

3. 次のコマンドを使用して、xhprof が正常にインストールされているかどうかを確認します。上記のコマンド出力が xhprof という単語がある場合は、xhprof 拡張機能が正常にインストールされていることを意味します。

$/usr/local/php/bin/php -m
ログイン後にコピー
4. xhprof 関連プログラムを指定されたディレクトリにコピーします

5. URL を通じてパフォーマンス データにアクセスするように nginx 構成を変更します。次のコードを nginx に追加します。 >

6. パフォーマンス データ収集プログラムを展開し、xhprof.php ファイルを /www/sites/xhprof.php に展開します。 xhprof.php ファイルの内容は次のとおりです。
$mkdir -p /www/sites/xhprof$cp -r ./xhprof_master/xhprof_html /www/sites/xhprof$cp -r ./xhprof_master/xhprof_lib /www/sites/xhprof
ログイン後にコピー

server {        listen  8999;        root    /opt/sites/xhprof/;        index  index.php index.html;        location ~ .*\.php$ {        add_header  Cache-Control "no-cache, no-store, max-age=0, must-revalidate";        add_header  Pragma  no-cache;        add_header Access-Control-Allow-Origin *;        add_header      Via "1.0 xgs-150";        fastcgi_pass   127.0.0.1:9000;        fastcgi_index  index.php;        include fastcgi.conf;        fastcgi_connect_timeout 300;         fastcgi_send_timeout 300;        fastcgi_read_timeout 300;        }   }
ログイン後にコピー
このコード ファイルを /www/sites/xhprof.php ディレクトリに展開した後、このファイルを有効にできます。 PHP アプリケーション コードへのコード侵入を回避したいため、次のメソッドでのみ有効にできます:

* Nginx/PHP-FPM メソッド:
<?phpdefine("XH_LOG_PATH", "/tmp/xhprof.log");$xh_force_disable = false; //设置性能分析是否启用,设置为true表示关闭。$max_time = 100; //millisecond$xh_enable = false;$start_time = microtime(true);//这里可以设置需要进行性能分析的url和设置的超时时间。如果指定的url,响应时间超过了设置的超时时间,性能分析数据就会被记录下来。超时时间的单位为毫秒。$xh_conf["urls"] = array(    //url => max_time    "/i/content/getdetail.json" => 100,);function xh_save_data(){    global $start_time, $xh_force_disable, $xh_enable, $max_time;    $end_time = microtime(true);    $cost_time = $end_time - $start_time;    $cost_time *= 1000;     if( $cost_time > $max_time && !$xh_force_disable && $xh_enable ){        include_once "/www/sites/xhprof/xhprof_lib/utils/xhprof_lib.php";    	include_once "/www/sites/xhprof/xhprof_lib/utils/xhprof_runs.php";        $xhprof_data = xhprof_disable();    	$objXhprofRun = new XHProfRuns_Default();    	$run_id = $objXhprofRun->save_run($xhprof_data, "xhprof");        $log_data = "cost_time||$cost_time||run_id||$run_id||request_uri||".$_SERVER["REQUEST_URI"]."\n";        //高并发下 可能会出现错乱情况。建议把 const_time run_id request_uri 写入到数据库        file_put_contents(XH_LOG_PATH, $log_data, FILE_APPEND);    }}$xh_request_uri = isset($_SERVER["REQUEST_URI"]) ? $_SERVER["REQUEST_URI"] : "";$arr_xh_cur_url = explode("?", $xh_request_uri);$xh_cur_url = $arr_xh_cur_url[0];if( !$xh_force_disable && isset($xh_conf["urls"][$xh_cur_url]) ){    $xh_enable = true;    $max_time = $xh_conf["urls"][$xh_cur_url];    xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);    register_shutdown_function("xh_save_data"); }else{    $xh_enable = false;}?>
ログイン後にコピー

fastcgi_param PHP_VALUE "auto_prepend_file=/ www /sites/xhprof.php";

* Apache モード:

php_value auto_prepend_file "/www/sites/xhprof.php"

* php.ini モード:

auto_prepend_file="/www/sites/xhprof.php"

注: オペコード キャッシュを使用する場合は、必ず PHP プロセスを再起動してください。

7. パフォーマンス分析ログを表示します

$tail /tmp/xhprof.log

$cost_time||200||run_id||adadfdsadad | |request_uri||/i/content/getcontent.json

上記の出力:

cost_time は 200 ミリ秒かかります

run_id は adadfdsadad

request_uri /i/content/getcontent.json

8. run_id

http://127.0.0.1:8999/xhprof_html/index.php?run に基づいてパフォーマンス分析データを表示します。 = adadfdsadad

閲覧方法は http://www.cnblogs.com/siqi/p/3790186.html

注:

1正式サービス開始後 この作業を行う前に、通常のデータ出力に影響がないことを必ず確認してください。出力内容が同じであることを確認後、再度オンラインに接続してください。

2. 各 URL の max_time を小さくしすぎないでください。

3. xhprof はオンライン サービスのパフォーマンスに影響を与えるため、1 つのマシン上でのみ監視するか、リクエストをランダムに監視するように xhprof.php コードを変更することをお勧めします。

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

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles