PHP性能測試工具XHProf使用詳解

一,什麼是XHProf

XHProf是一個分層PHP性能分析工具。它報告函數級別的請求次數和各種指標,包括 阻塞時間,CPU時間和內存使用情況。一個函數的開銷,可細分成調用者和被調用者的開銷,XHProf數據收集階段,它記錄調用次數的追蹤和包容性的指標 弧在動態callgraph的一個程序。它獨有的數據計算的報告/後處理階段。在數據收集時,XHProfd通過檢測循環來處理遞歸的函數調用,並通過給 遞歸調用中每個深度的調用一個有用的命名來避開死循環。XHProf分析報告有助於理解被執行的代碼的結構,它有一個簡單的HTML的用戶界面( PHP寫成的)。基於瀏覽器的性能分析用戶界面能更容易查看,或是與同行們分享成果。也能繪製調用關係圖。
 

二,安裝XHProf擴展模塊

1,安裝

1 wget http://pecl.php.net/get/xhprof-0.9.2.tgz
2 tar zxvf  xhprof-0.9.2.tgz
3 cp ./xhprof-0.9.2.tgz ./www         //xhprof自身帶有一個web版的分析頁面,放到我的web服務器下面
4 cd xhprof-0.9.2/extension
5 /usr/local/php/bin/phpize
6 ./configure --enable-xhprof --with-php-config=/usr/local/php/bin/php-config
7 make && make install

2,配置

1 [xhprof]
2 extension=xhprof.so
3 xhprof.output_dir=/home/zhangy/xhprof  //如果不加存放目錄的話,默認是放在/tmp下面

三,XHProf測試

前面我們說過了,XHProf自身帶有一個web版的測試工具,裏面還有一個小例子。看一下這個例子,我做了一點修改和註釋

01 <?php
02 function bar($x) {
03     if ($x > 0) {
04         bar($x -1);
05     }
06 }
07 function foo() {
08     for ($idx = 0; $idx < 5; $idx++) {
09         bar($idx);
10         $x strlen("abc");
11     }
12
13  
14 //啓動xhprof
15 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 
16  
17 //調用foo函數,也是我們要分析的函數
18 foo(); 
19  
20 //停止xhprof
21 $xhprof_data = xhprof_disable(); 
22  
23 //取得統計數據
24 print_r($xhprof_data); 
25  
26 $XHPROF_ROOT realpath(dirname(__FILE__) . '/..');
27 include_once $XHPROF_ROOT "/xhprof_lib/utils/xhprof_lib.php";
28 include_once $XHPROF_ROOT "/xhprof_lib/utils/xhprof_runs.php"
29  
30 //保存統計數據,生成統計ID和source名稱
31 $xhprof_runs new XHProfRuns_Default();
32 $run_id $xhprof_runs->save_run($xhprof_data"xhprof_foo"); //source名稱是xhprof_foo 
33  
34 //彈出一個統計窗口,查看統計信息
35 echo "<script language='javascript'>window.open('../xhprof_html/index.php?run=" $run_id "&source=xhprof_foo');</script>";
36 ?>

以下是部分的結果:

1 [foo==>bar] => Array
2      (
3      [ct] => 5       //bar()這個函數被調用了5次
4      [wt] => 63      //每次運行bar()所要的時間,不知道這個是不是平均值
5      [cpu] => 0      //每次運行bar(),cpu運算時間
6      [mu] => 2860    //每次運行bar(),php所使用內存的改變
7      [pmu] => 0      //每次運行bar(),php在內存使用最高峯時,所使用內存的改變
8 )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章