1. 程式人生 > >Linux環境下面安裝PHP效能分析工具XHProf(PHP5.6)

Linux環境下面安裝PHP效能分析工具XHProf(PHP5.6)

XHProf是一個分層PHP效能分析工具。它報告函式級別的請求次數和各種指標,包括阻塞時間,CPU時間和記憶體使用情況。一個函式的開銷,可細分成呼叫者和被呼叫者的開銷,XHProf資料收集階段,它記錄呼叫次數的追蹤和包容性的指標弧在動態callgraph的一個程式。它獨有的資料計算的報告/後處理階段。在資料收集時,XHProfd通過檢測迴圈來處理遞迴的函式呼叫,並通過給遞迴呼叫中每個深度的呼叫一個有用的命名來避開死迴圈。XHProf分析報告有助於理解被執行的程式碼的結構,其目錄結構中自帶有一個由PHP編寫的瀏覽介面,便於使用者直觀的檢視請求佔用效能情況。在graphviz外掛的輔助下,也能繪製清晰呼叫關係圖。XHProf已經廣泛的應用於各大PHP開發的系統中。

安裝XHProf


1. 安裝PHP擴充套件,XHProf的官方下載地址為http://pecl.php.net/package/xhprof,預設的PHP沒有自帶這個擴充套件,所以要進行安裝。

wget http://pecl.php.net/get/xhprof-0.9.3.tgz #獲取安裝包
tar zxf xhprof-0.9.3.tgz  #解壓安裝包
cd xhprof-0.9.3  #進入資料夾
cp -r xhprof_html xhprof_lib /data/xhprof #根據具體情況進行拷貝
cd extension 
phpize  #phpize偵測PHP安裝環境
./configure 
make 
make install

備註:xhprof_html中存放分析結果專案,用來展示效能分析,需要將資料夾放到apache的專案目錄下面才能執行訪問 ;xhprof_lib作為三方庫,用於引入到PHP專案中。

2. 配置php.ini支援XHProf,如果不知道php.ini在哪裡,可以使用命令find / -name php.ini。

[xhprof] 
extension=xhprof.so 
; 
; directory used by default implementation of the iXHProfRuns 
; interface (namely, the XHProfRuns_Default class) for storing 
; XHProf runs. 
; 
xhprof.output_dir=/data/xhprof/logs #根據實際情況進行配置

配置成功後,重啟apache,使用service apache restart 或者service httpd restart等相關命令,如果phpinfo()出現如下頁面,表示安裝成功。

3. 安裝Graphviz,安裝Graphviz的目的是為了xhprof圖形化web工具檢視profiling log檔案。

方式1:

wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz 
tar zxf graphviz-2.24.0.tar.gz 
cd graphviz-2.24.0 
./configure 
make 
make install

如果找不到對應的資源可以使用這個連結https://graphviz.gitlab.io/pub/graphviz/stable/SOURCES/graphviz.tar.gz

方式2:使用命令 yum install graphviz 直接安裝。

4. 安裝libpng(可能需要的步驟)

編譯graphviz提示資訊png: No (missing png.h),也就是dot 不支援PNG,此時需要安裝libpng包。

wget http://nchc.dl.sourceforge.net/project/libpng/libpng15/1.5.1/libpng-1.5.1.tar.gz 
tar zxf libpng-1.5.1.tar.gz 
cd libpng-1.5.1 
./configure 
make 
make install

或者使用命令yum install libpng直接進行安裝。

開始進行效能分析


1. 建立一個檔案test.php,然後按照下面的模式進行編碼。

<?php

// start profiling 
xhprof_enable(); 
// xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); // 允許CPU和記憶體輸出 
// run program 
.... 
// stop profiler 
$xhprof_data = xhprof_disable(); 
// 
// Saving the XHProf run 
// using the default implementation of iXHProfRuns. 
// 
$XHPROF_ROOT = "/projects/xhprof";//這裡填寫的就是你的xhprof的路徑 
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";

?>

2. 檢視分析報告 

在瀏覽器中訪問該頁面後,會在/data/xhprof/logs這個目錄下面生成一個.xhprof_foo結尾的檔案,然後會在頁面上顯示http://<xhprof-ui-address>/index.php?run=49bafaa3a3f66&source=xhprof_foo 這句程式碼,然後訪問上面說到的展示目錄http://xxx/xhprof_html/index.php?run=49bafaa3a3f66&source=xhprof_foo就可以看到內容了。

3. 檢視函式呼叫圖,然後點選[View Full Callgraph],就可以看到詳細的函式呼叫過程。

問題總結


1.  編譯XHProf擴充套件不通過,由於之前使用的xhprof-0.9.2版本,這個版本是09年的,比較老,換成xhprof-0.9.3就可以編譯通過了。

2. 放在PHP裡面後,出現了報錯,將啟動改為下面的程式碼就好了。

xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

3. 點選[View Full Callgraph]出現了。以為是沒有安裝好graphviz,結果是由於沒有找到日誌檔案,請仔細讀懂下面語句的意思。

Error: either we can not find profile data for run_id 4d7f0bd99a12f or the threshold 0.01 is too small or you do not have ‘dot’ image generation utility installed. 

4. 由於安裝了兩個版本的graphviz,手動安裝的版本沒有安裝好png支援,老是出現不支援png的提示,然後解除安裝掉這個手動版本就可以了,具體做法是cd到安裝目錄,執行make uninstall。

附錄


XHProf報告欄位含義:

附加一篇:給CentOS6.3 + PHP5.3 安裝PHP效能測試工具 XHProf-0.9.2 https://blog.csdn.net/qinglianluan/article/details/48828717