您好,登錄后才能下訂單哦!
XHProf是一個分層PHP性能分析工具。它報告函數級別的請求次數和各種指標,包括阻塞時間,CPU時間和內存使用情況。一個函數的開銷,可細分成調用者和被調用者的開銷,XHProf數據收集階段,它記錄調用次數的追蹤和包容性的指標弧在動態callgraph的一個程序。它獨有的數據計算的報告/后處理階段。在數據收集時,XHProfd通過檢測循環來處理遞歸的函數調用,并通過給遞歸調用中每個深度的調用一個有用的命名來避開死循環。XHProf分析報告有助于理解被執行的代碼的結構,它有一個簡單的HTML的用戶界面( PHP寫成的)
xhprof安裝配置
[root@news ~]# wget http://pecl.php.net/get/xhprof-0.9.2.tgz
[root@news ~]# tar zxf xhprof-0.9.2.tgz
[root@news xhprof-0.9.2]#cd xhprof-0.9.2
[root@news xhprof-0.9.2]#cp -r xhprof_html xhprof_lib /www/auto/(網站源碼路徑復制完成之后記得修改用戶所有者權限)
[root@news xhprof-0.9.2]#cd extension
[root@news extension]# ./configure --with-php-config=/usr/local/php/bin/phpize
[root@news extension]# make && make install
安裝完成之后修改php.ini添加(前提是你的擴展路徑已經修改成extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/")
extension = xhprof.so
xhprof.output_dir=/log/xhprof
修改完成之后重新啟動web服務 apache重啟服務 nginx重啟php-fpm服務
安裝Graphviz:(也可以不安裝,如果安裝了Graphviz,XHProf會用比較牛的圖形方式展現統計數據)
root@news ~]# wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
root@news ~]# tar zxf graphviz-2.24.0.tar.gz
root@news ~]# cd graphviz-2.24.0
[root@news graphviz-2.24.0]# ./configure
[root@news graphviz-2.24.0]#make
[root@news graphviz-2.24.0]#make install
安裝完成后,會生成/usr/local/bin/dot文件,你應該確保路徑在PATH環境變量里,以便XHProf能找到它
xhprof_enable(); //統計的代碼部分之前加,如果要顯示CPU占用 可以加入XHPROF_FLAGS_CPU參數,內存是XHPROF_FLAGS_MEMORY,如果兩個一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY,如:xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
xhprof_disable();//統計的代碼部分之后加
這樣xhprof就可以統計當前頁面的函數性能情況了。xhprof會把每次訪問加入統計代碼的頁面的性能統計結果在指定目錄下生成一個文件,文件名命名方式為:本次訪問的系統ID.命名空間,每次刷新頁面都會重新生成一個文件,每個的系統ID都不同。
然后通過xhprof_html目錄的http訪問url來查看結果。如:http://app/xhprof_html/?run=運行id&source=命名空間(其中運行ID和命名空間可以根據xhprof生成的文件名來確定)
使用XHProf:
// start profiling
xhprof_enable();
// run program
....
// stop profiler
$xhprof_data = xhprof_disable();
//
// Saving the XHProf run
// using the default implementation of iXHProfRuns.
//
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
// Save the run under a namespace "xhprof_foo".
//
// **NOTE**:
// By default save_run() will automatically generate a unique
// run id for you. [You can override that behavior by passing
// a run id (optional arg) to the save_run() method instead.]
//
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
echo "---------------\n".
"Assuming you have set up the http based UI for \n".
"XHProf at some address, you can view run at \n".
"http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";
貼下我的一個測試文件
[root@news trunk]# vi test.php
<?php
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
phpinfo();
$data = xhprof_disable();
include_once "xhprof_lib/utils/xhprof_lib.php";
include_once "xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($data, "xhprof_foo");
echo "---------------\n".
"Assuming you have set up the http based UI for \n".
"XHProf at some address, you can view run at \n".
"http://XXXX/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";
?>
之后在瀏覽器里面直接訪問test.php的頁面會在上面設定的xhprof.output_dir目錄里生成名字類似52ba534254958.xhprof_foo.xhprof的數據文件,可以很方便的通過Web方式瀏覽效果:
http://XXXX/xhprof_html/index.php?run=52ba534254958&source=xhprof_foo
目前顯示的是表格形式的顯示,點擊頁面上的[View Full Callgraph],就能看到精美的圖片顯示了。
下面是一些參數說明
Inclusive Time 包括子函數所有執行時間。
Exclusive Time/Self Time 函數執行本身花費的時間,不包括子樹執行時間。
Wall Time 花去了的時間或掛鐘時間。
CPU Time 用戶耗的時間+內核耗的時間
Inclusive CPU 包括子函數一起所占用的CPU
Exclusive CPU 函數自身所占用的CPU
所有參數說明
Function Name 函數名
Calls 調用次數
Calls% 調用百分比
Incl. Wall Time (microsec) 調用的包括子函數所有花費時間 以微秒算(一百萬分之一秒)
IWall% 調用的包括子函數所有花費時間的百分比
Excl. Wall Time (microsec) 函數執行本身花費的時間,不包括子樹執行時間,以微秒算(一百萬分之一秒)
EWall% 函數執行本身花費的時間的百分比,不包括子樹執行時間
Incl. CPU(microsecs) 調用的包括子函數所有花費的cpu時間。減Incl. Wall Time即為等待cpu的時間
減Excl. Wall Time即為等待cpu的時間
ICpu% Incl. CPU(microsecs)的百分比
Excl. CPU(microsec) 函數執行本身花費的cpu時間,不包括子樹執行時間,以微秒算(一百萬分之一秒)。
ECPU% Excl. CPU(microsec)的百分比
Incl.MemUse(bytes) 包括子函數執行使用的內存。
IMemUse% Incl.MemUse(bytes)的百分比
Excl.MemUse(bytes) 函數執行本身內存,以字節算
EMemUse% Excl.MemUse(bytes)的百分比
Incl.PeakMemUse(bytes) Incl.MemUse的峰值
IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比
Excl.PeakMemUse(bytes) Excl.MemUse的峰值
EPeakMemUse% EMemUse% 峰值百分比
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。