摘要:說明將部署在線上環境,在特定情況下進行性能分析,方便快捷的排查線上性能問題。通過參數指定及添加代碼行觸發進入性能分析,并將結果保存入。因為對性能的影響,只部署在一臺機子上。
說明
將xhprof部署在線上環境,在特定情況下進行性能分析,方便快捷的排查線上性能問題。
通過參數指定及添加代碼行觸發進入性能分析,并將結果保存入MongoDB。
因為xhprof對性能的影響,只部署在一臺機子上。
環境配置PHP 5.5.25
xhprof-0.9.4
xhprof:git@github.com:phacility/xhprof.git
核心入口文件/PATH/xhprof/config/inject.php
$clientIp, "path" => $path, "hostname" => $hostName ]; } } //主處理過程 if( !function_exists("xphrof_mainProcess") ){ function xphrof_mainProcess($cmdName=""){ if ( extension_loaded("xhprof") ) { //xhprof功能統一開關,緊急情況下使用 $xhprofMainSwitch = true; //true-開, false-關 //判斷是否進入分析 $enable = xphrof_checkEnable($cmdName); if ( $xhprofMainSwitch && $enable ) { $pathData = xphrof_getUniqSign($cmdName); //開始性能分析 // XHPROF_FLAGS_NO_BUILTINS - 使得跳過所有內置(內部)函數 // XHPROF_FLAGS_CPU - 使輸出的性能數據中添加 CPU 數據 // XHPROF_FLAGS_MEMORY - 使輸出的性能數據中添加內存數據 xhprof_enable( XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU ); //注冊,腳本執行完或exit后執行 register_shutdown_function(function() use ($pathData){ //xhprof的數據 $xhprofData = xhprof_disable(); //相應給客戶端并結束請求 $returnClient = -1; if (function_exists("fastcgi_finish_request")) { $returnClient = fastcgi_finish_request(); } //當前環境數據及post、get數據 $envData = [ "env" => $_SERVER, "get" => $_GET, "post" => $_POST, "return_client" => intval($returnClient) ]; $XHPROF_ROOT = realpath(dirname(__FILE__) ."/.."); include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php"; include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs_mongo.php"; include_once $XHPROF_ROOT . "/xhprof_lib/service/MongoBaseSvc.php"; //加載配置文件 $xhprofConfig = include_once $XHPROF_ROOT . "/config/config.php"; $xhprofRuns = new XHProfRuns_Mongo($xhprofConfig); $xhprofRuns->save_run($xhprofData, $envData, $pathData); }); } } } } //默認啟動一次-http,指定服務器才可執行 if( function_exists("php_uname") && in_array(php_uname("n"), [ "10.10.10.10", //測試開發服務器 "11.11.11.11" //線上執行服務器 ], true) ){ xphrof_mainProcess(); } //comand進入分析 if( !function_exists("xphrof_startProcess") ){ function xphrof_startProcess($cmdName=""){ xphrof_mainProcess($cmdName); } }加載入口文件方案
1. 在項目啟動的配置文件中加載
//例如:bootstrap/autoload.php /* |-------------------------------------------------------------------------- | add xhprof config |-------------------------------------------------------------------------- | | inject xhprof config. | */ $xhprofFile = __DIR__."/../xhprof/config/inject.php"; if (file_exists($xhprofFile)) { require_once $xhprofFile; }
2. 在項目nginx的配置中加載
//在 nginx 的fastcgi配置處 set $xhprofconf "auto_prepend_file=/PATH/xhprof/config/inject.php"; fastcgi_param PHP_VALUE $xhprofconf;觸發進入
對HTTP請求訪問時增加參數:showyourbug=1
對CLI腳本代碼中增加:xphrof_startProcess(__CLASS__);
MongoDB保存結構解析保存xhprof_disable()返回的數據、請求的環境變量及數據。可設置過期索引保存指定時長日志。
{ "ip" : "10.10.10.10", //訪問客戶端ip "path" : "http-", //資源標識,http-接口請求,cmd-artisan腳本執行 "hostname" : "machine_host_name", //執行機器名稱 "run_id" : "5afe795c96a83", //唯一run_id "main" : { //整體數據 "ct" : NumberLong(1), "wt" : NumberLong(36), "cpu" : NumberLong(0), "mu" : NumberLong(1856), "pmu" : NumberLong(672) }, "xhprof_raw_data" : "a:2:{s:23:"main()==>xhprof_disable";a:5:{s:2:"ct";i:1;s:2:"wt";i:8;s:3:"cpu";i:0;s:2:"mu";i:840;s:3:"pmu";i:96;}s:6:"main()";a:5:{s:2:"ct";i:1;s:2:"wt";i:36;s:3:"cpu";i:0;s:2:"mu";i:1856;s:3:"pmu";i:672;}}", //原始數據體 "env_data" : { //相關環境日志 "env" : { //$_SERVER信息 "USER" : "nobody", "HOME" : "/", "FCGI_ROLE" : "RESPONDER", "SCRIPT_FILENAME" : "/PATH/public/index.php", ...... "REQUEST_TIME" : NumberLong(1526626652) }, "get" : { //$_GET信息 "showyourbug" : "1" }, "post" : [], //$_POST信息 "return_client" : NumberLong(-1) //fastcgi_finish_request相應客戶端結果 }, "index_time" : ISODate("2018-05-18T06:57:32.000Z"), //過期索引,保留2天 "create_time" : "2018-05-18 14:57:32" //創建時間 }對線上性能的影響分析
測試接口
public function getHello(){ $ret = [ "errno" => 0, "errmsg" => "success" ]; return json_encode($ret); }
使用ab請求
ab -n 1000 -c 100 -X 10.10.10.10:80 http://hostname/hello ab -n 1000 -c 100 -X 10.10.10.10:80 http://hostname/hello?showyourbug=1
測試結果
批量請求對服務器影響:
| 測試類別 | Requests per second (#/sec) | 平均 | Time per request (ms) | 平均 |
| 僅測試接口 | 49.23,50.02,49.41 | 49.55 | 20.312,19.992,20.239 | 20.181 |
| 加載配置(未進入) | 46.74,45.48,45.21 | 45.81 (-8.76%) | 21.397,21.987,22.118 | 21.834 (-8.19%) |
| 加載配置(進入) | 10.72,10.48,11.46 | 10.88 (-78%) | 93.281,95.452,87.259 | 91.99 (-355.82%) |
對單個請求影響:
| 測試類別 | Time per request (ms) | 平均 |
| 僅測試接口 | 66.972,87.029,72.605 | 75.54 |
| 加載配置(未進入) | 79.183,80.728,83.101 | 81.004 (-7.23%) |
| 加載配置(進入) | 275.186,287.293,291.312 | 284.597 (-271.45%) |
結論
xhprof會影響線上性能,所以只部署到一臺線上機進行監控。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29008.html
toolkit是tideway官方提供的性能分析的命令行工具。如果你只是本地開發調試接口性能,不想安裝xhgui,那么使用toolkit就足夠了 安裝 安裝tideways拓展 git clone https://github.com/tideways/php-xhprof-extension.git cd php-profiler-extension phpize ./configure mak...
摘要:我所在的美團酒店事業部去年月份成立,新的業務新的開發團隊,這一切使得我們的前后端分離推進的很徹底。日志監控平臺日志監控平臺是美團內部的一個日志收集系統,目前美團統一使用收集日志,具有接收格式日志的能力,而日志監控平臺也是以格式日志來收集。 轉自:美團技術團隊 作者:美團技術團隊 分享理由:很好的分享,可見,基于Node的前后端分離的架構是越顯流行和重要,前端攻城獅們,No...
摘要:大交通研發質量體系建設為了幫助用戶更好地完成消費決策閉環,馬蜂窩上線了大交通業務,為用戶提供購買機票火車票等服務。 質量是決定產品能否成功、企業能否持續發展的關鍵因素之一。如何做好質量體系建設,這是個比較大的話題,包含的范圍很廣,也沒有固定的衡量標準。 打開一個互聯網公司招聘網站,搜索「測試工程師」崗位時,你會發現幾乎全部 JD 都包含一條要求「建設或者參與建設所負責業務的質量體系」。...
摘要:大交通研發質量體系建設為了幫助用戶更好地完成消費決策閉環,馬蜂窩上線了大交通業務,為用戶提供購買機票火車票等服務。 質量是決定產品能否成功、企業能否持續發展的關鍵因素之一。如何做好質量體系建設,這是個比較大的話題,包含的范圍很廣,也沒有固定的衡量標準。 打開一個互聯網公司招聘網站,搜索「測試工程師」崗位時,你會發現幾乎全部 JD 都包含一條要求「建設或者參與建設所負責業務的質量體系」。...
摘要:本文介紹了企業互聯網開發及運維的一些實踐,深入剖析了互聯網項目開發及上線過程中的各種痛點及解決之道。線上出錯,我們通過收集服務器端應用性能數據的方式,實時展示應用的調用拓撲圖,并根據出現異常的請求,進行下鉆,定位出具體出現問題的代碼。 本文介紹了企業互聯網開發及運維的一些實踐,深入剖析了互聯網項目開發及上線過程中的各種痛點及解決之道。一個互聯網項目的上線并不是那么容易,需要經過很多的環...
閱讀 1496·2021-10-11 10:59
閱讀 1859·2021-09-09 11:36
閱讀 1370·2019-08-30 15:55
閱讀 1322·2019-08-29 11:20
閱讀 3057·2019-08-26 13:39
閱讀 1458·2019-08-26 13:37
閱讀 1951·2019-08-26 12:11
閱讀 1313·2019-08-23 14:28