性能分析軟件 xhprof與Graphviz 安裝、說明與結果分析

引言: 

XHProf是一個分層PHP性能分析工具。它報告函數級別的請求次數和各種指標,包括阻塞時間,CPU時間和內存使用情 況。一個函數的開銷,可細分成調用者和被調用者的開銷。原始數據收集部分是用純C實現的,是一個名叫xhprof的 Zend擴展 。XHProf有一個簡單的HTML的用戶界面( PHP寫成的)。基於瀏覽器的性能分析用戶界面能更容易查看,或是與同行們分享成果。也能繪製調用關係圖。

XHProf報告往往可以有助於理解被執行的代碼的結構。的等級性質的報告可用來確定,例如,什麼鏈要求導致了所謂的特殊 功能得到。

XHProf可以比較兩次運行的結果(又名“差異報告”)或是從多次運行得到的彙總數據。差異和彙總報告,就像單一運行報 告一樣,也提供“平板”以及“分層”的性能分析視圖。

XHProf是一種輕量級的性能分析工具。在數據收集階段,它記錄調用次數的追蹤和包容性的指標弧在動態 callgraph的一個程序。它獨有的數據計算的報告/後處理階段。在數據收集時,XHProfd通過檢測循環來處理遞歸的函數調用,並通過給遞歸調用 中每個深度的調用一個有用的命名來避開死循環。

XHProf的輕量級性質和匯聚功能,使得它非常適合用於收集“生產環境”的性能統計數據的統計。

安裝:

wget http://pecl.php.net/get/xhprof-0.9.2.tgz

tar zxf xhprof-0.9.2.tgz

cd xhprof-0.9.2

cp -r xhprof_html xhprof_lib <directory_for_htdocs>

cd extension

phpize

./configure

make

make install

 

編輯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=<directory_for_storing_xhprof_runs>

 

 

 

 

重啓服務讓修改生效,現在就可以使用XHProf了,不過爲了顯示效果更炫、更直觀,最好繼續安裝Graphviz

 

安裝Graphviz

 

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

 

xhprof 使用說明:

在代碼中,程序頭部如下設置:

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

 

 

程序最下面:

$xhprof_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($xhprof_data, 'xhprof');

echo 'http://<xhprof-ui-address >/index.php?run='.$run_id.'&source=xhprof';//source的值就是save_run的第二個參數的值。其中,網址就是上面保存xhprof_html的路徑。

經過上面設置,之後執行剛纔的php頁面,xhprof.output_dir指定的目錄便有文件生成,類似於4e813c15a46ff.xhprof

通過瀏覽器訪問:

http://<xhprof-ui-address >/index.php?run=4e813c15a46ff&source=xhprof    

 

但是如果查看[View Full Callgraph]的時候,卻提示如下: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.

 

解釋如下:

xhprof繪製的是png圖,系統(graphviz-2.24.0)不支持。繪圖的dot拓展沒裝成功,也就是dot 不支持PNG。趕緊再次編譯下graphviz,看看提示信息有什麼缺少的

graphviz目錄下,執行  ./configure

可以看到png:           No (missing png.h)

 

解決辦法:

 

libpng官網down分源碼,再次編譯一下

網址 http://sourceforge.net/projects/libpng/files/libpng15/1.5.1/  選擇合適源碼包

 

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

然後重新編譯安裝graphviz  ,解決問題

當現在打開[View Full Callgraph]的時候,直觀的資源佔用統計圖就出現在眼前了

 

結果分析:

 主要的

Inclusive Time (或子樹時間):包括子函數所有執行時間。

Exclusive Time/Self Time:函數執行本身花費的時間,不包括子樹執行時間。

Wall時間:花去了的時間或掛鐘時間。

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% 峯值百分比

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章