您好,登錄后才能下訂單哦!
XHProf是一個(gè)分層PHP性能分析工具。它報(bào)告函數(shù)級(jí)別的請(qǐng)求次數(shù)和各種指標(biāo),包括阻塞時(shí)間,CPU時(shí)間和內(nèi)存使用情況。一個(gè)函數(shù)的開(kāi)銷,可細(xì)分成調(diào)用者和被調(diào)用者的開(kāi)銷,XHProf數(shù)據(jù)收集階段,它記錄調(diào)用次數(shù)的追蹤和包容性的指標(biāo)弧在動(dòng)態(tài)callgraph的一個(gè)程序。它獨(dú)有的數(shù)據(jù)計(jì)算的報(bào)告/后處理階段。在數(shù)據(jù)收集時(shí),XHProfd通過(guò)檢測(cè)循環(huán)來(lái)處理遞歸的函數(shù)調(diào)用,并通過(guò)給遞歸調(diào)用中每個(gè)深度的調(diào)用一個(gè)有用的命名來(lái)避開(kāi)死循環(huán)。XHProf分析報(bào)告有助于理解被執(zhí)行的代碼的結(jié)構(gòu),它有一個(gè)簡(jiǎn)單的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/(網(wǎng)站源碼路徑復(fù)制完成之后記得修改用戶所有者權(quán)限)
[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添加(前提是你的擴(kuò)展路徑已經(jīng)修改成extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/")
extension = xhprof.so
xhprof.output_dir=/log/xhprof
修改完成之后重新啟動(dòng)web服務(wù) apache重啟服務(wù) nginx重啟php-fpm服務(wù)
安裝Graphviz:(也可以不安裝,如果安裝了Graphviz,XHProf會(huì)用比較牛的圖形方式展現(xiàn)統(tǒng)計(jì)數(shù)據(jù))
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
安裝完成后,會(huì)生成/usr/local/bin/dot文件,你應(yīng)該確保路徑在PATH環(huán)境變量里,以便XHProf能找到它
xhprof_enable(); //統(tǒng)計(jì)的代碼部分之前加,如果要顯示CPU占用 可以加入XHPROF_FLAGS_CPU參數(shù),內(nèi)存是XHPROF_FLAGS_MEMORY,如果兩個(gè)一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY,如:xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
xhprof_disable();//統(tǒng)計(jì)的代碼部分之后加
這樣xhprof就可以統(tǒng)計(jì)當(dāng)前頁(yè)面的函數(shù)性能情況了。xhprof會(huì)把每次訪問(wèn)加入統(tǒng)計(jì)代碼的頁(yè)面的性能統(tǒng)計(jì)結(jié)果在指定目錄下生成一個(gè)文件,文件名命名方式為:本次訪問(wèn)的系統(tǒng)ID.命名空間,每次刷新頁(yè)面都會(huì)重新生成一個(gè)文件,每個(gè)的系統(tǒng)ID都不同。
然后通過(guò)xhprof_html目錄的http訪問(wèn)url來(lái)查看結(jié)果。如:http://app/xhprof_html/?run=運(yùn)行id&source=命名空間(其中運(yùn)行ID和命名空間可以根據(jù)xhprof生成的文件名來(lái)確定)
使用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";
貼下我的一個(gè)測(cè)試文件
[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";
?>
之后在瀏覽器里面直接訪問(wèn)test.php的頁(yè)面會(huì)在上面設(shè)定的xhprof.output_dir目錄里生成名字類似52ba534254958.xhprof_foo.xhprof的數(shù)據(jù)文件,可以很方便的通過(guò)Web方式瀏覽效果:
http://XXXX/xhprof_html/index.php?run=52ba534254958&source=xhprof_foo
目前顯示的是表格形式的顯示,點(diǎn)擊頁(yè)面上的[View Full Callgraph],就能看到精美的圖片顯示了。
下面是一些參數(shù)說(shuō)明
Inclusive Time 包括子函數(shù)所有執(zhí)行時(shí)間。
Exclusive Time/Self Time 函數(shù)執(zhí)行本身花費(fèi)的時(shí)間,不包括子樹(shù)執(zhí)行時(shí)間。
Wall Time 花去了的時(shí)間或掛鐘時(shí)間。
CPU Time 用戶耗的時(shí)間+內(nèi)核耗的時(shí)間
Inclusive CPU 包括子函數(shù)一起所占用的CPU
Exclusive CPU 函數(shù)自身所占用的CPU
所有參數(shù)說(shuō)明
Function Name 函數(shù)名
Calls 調(diào)用次數(shù)
Calls% 調(diào)用百分比
Incl. Wall Time (microsec) 調(diào)用的包括子函數(shù)所有花費(fèi)時(shí)間 以微秒算(一百萬(wàn)分之一秒)
IWall% 調(diào)用的包括子函數(shù)所有花費(fèi)時(shí)間的百分比
Excl. Wall Time (microsec) 函數(shù)執(zhí)行本身花費(fèi)的時(shí)間,不包括子樹(shù)執(zhí)行時(shí)間,以微秒算(一百萬(wàn)分之一秒)
EWall% 函數(shù)執(zhí)行本身花費(fèi)的時(shí)間的百分比,不包括子樹(shù)執(zhí)行時(shí)間
Incl. CPU(microsecs) 調(diào)用的包括子函數(shù)所有花費(fèi)的cpu時(shí)間。減Incl. Wall Time即為等待cpu的時(shí)間
減Excl. Wall Time即為等待cpu的時(shí)間
ICpu% Incl. CPU(microsecs)的百分比
Excl. CPU(microsec) 函數(shù)執(zhí)行本身花費(fèi)的cpu時(shí)間,不包括子樹(shù)執(zhí)行時(shí)間,以微秒算(一百萬(wàn)分之一秒)。
ECPU% Excl. CPU(microsec)的百分比
Incl.MemUse(bytes) 包括子函數(shù)執(zhí)行使用的內(nèi)存。
IMemUse% Incl.MemUse(bytes)的百分比
Excl.MemUse(bytes) 函數(shù)執(zhí)行本身內(nèi)存,以字節(jié)算
EMemUse% Excl.MemUse(bytes)的百分比
Incl.PeakMemUse(bytes) Incl.MemUse的峰值
IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比
Excl.PeakMemUse(bytes) Excl.MemUse的峰值
EPeakMemUse% EMemUse% 峰值百分比
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。