ホームページ >バックエンド開発 >PHPチュートリアル >PHP アプリケーションのパフォーマンス監視と分析の非侵入型監視
PHP アプリケーションのパフォーマンスのいわゆる非侵入型監視とは、既存のシステム コードを変更せずにシステムを監視することを意味します。このようなシステムは、PHP アプリケーションにより簡単に適用できます。これは他の人にインスピレーションを与える方法であり、誰でもコミュニケーションをとることができます。
各リクエストのアクセス時間のみを監視する場合。 nginx ログを直接確認してください。 nginx ログには 2 つのオプションがあります。 $request_time と $upstream_response_time 。 どちらのオプションでも応答時間を記録します。
1. $request_time は、ユーザーリクエストの最初のバイトを受け入れてから応答データを送信するまでの時間を指します。これには、リクエストデータを受信する時間、プログラムの応答時間、およびデータを出力する時間が含まれます。応答データ。
2. $upstream_response_time は、Nginx がバックエンド (php-cgi) への接続を確立してから、データを受け入れて接続を閉じるまでの時間を指します。
バックエンド PHP サービスのパフォーマンスのみを監視する場合は、$upstream_response_time オプションに注意してください。
PHP リクエストをさらに処理する必要があり、その特定の部分により多くの時間がかかる場合は、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 -m4. 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 コードを変更することをお勧めします。