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