閱讀804 返回首頁    go 中電雲集


PHP性能分析工具XHProf

資料來源:互聯網

XHProf是facebook開源出來的一個php輕量級的性能分析工具,跟Xdebug類似,但性能開銷更低,
還可以用在生產環境中,也可以由程序開 關來控製是否進行profile。基於瀏覽器的性能分析用戶
界麵能更容易查看,或是與同行們分享成果。也能繪製調用關係圖。在數據收集階段,它記錄調用次
數的追蹤和包容性的指標弧在動態callgraph的一個程序。它獨有的數據計算的報告/後處理階段。
在數據收集時,XHProfd通過檢測循環來處理遞 歸的函數調用,並通過給遞歸調用中每個深度的調
用一個有用的命名來避開死循環。
XHProf的輕量級性質和匯聚功能,使得它非常適合用於收集“生產環境”的性能統計數據的統計。

一、編譯安裝XHProf
[root@localhost src]# wget https://pecl.php.net/get/xhprof-0.9.2.tgz
[root@localhost src]# tar zxf xhprof-0.9.2.tgz
[root@localhost src]# cd xhprof-0.9.2
[root@localhost xhprof-0.9.2]# cp -r xhprof_html xhprof_lib /var/www/html/
[root@localhost xhprof-0.9.2]# cd extension/
[root@localhost extension]# /usr/local/webserver/php/bin/phpize
[root@localhost extension]# ./configure  –with-php-config=/usr/local/webserver/php/bin/php-config

二、配置 php.ini 文件
vi vi /usr/local/webserver/php/etc/php.ini  修改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>
OK 重啟WEB服務器。為了更加清晰顯示程序執行、調用結構,安裝Graphviz。

三、安裝Graphviz:
[root@localhost src]# wget https://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
[root@localhost src]# tar zxf graphviz-2.24.0.tar.gz
[root@localhost graphviz-2.24.0]# cd graphviz-2.24.0
[root@localhost graphviz-2.24.0]# ./configure
[root@localhost graphviz-2.24.0]# make
[root@localhost graphviz-2.24.0# make install

四、應用XHProf
客戶端能很靈活地保存他們從XHProf運行中得到的XHProf原始數據。用戶界麵層的XHProf提供了一個 iXHProfRuns接口
(見xhprof_lib/utils/xhprof_runs.php ),客戶端可以利用。這使得客戶端能夠告訴用戶界麵層,如何獲取XHProf運行後產生的對應數據。
XHProf的UI 庫自帶的有一個基於文件的iXHProfRUns接口實現,即“ XHProfRuns_Default”(見xhprof_lib/utils/xhprof_runs.php)。
這個自帶的實現將XHProf運行結 果存在ini配置的xhprof.output_dir參數指定的某個目錄下。
一次XHProf運行,必須用一個命名空間和運行編號來唯一確定。
假設使用iXHProfRuns接口的XHProfRuns_Default這個默認實現方式,如:

//xhprofStart.php 文件

<?php
$XHPROF_DEBUG     =   FALSE;
$debugUserIDArray =   array(
123456     =>     1,
456152  =>  1,
);
if (function_exists('xhprof_enable') && !empty($debugUserIDArray[$winduid]))
{
$XHPROF_DEBUG   =   TRUE;
}

if ($XHPROF_DEBUG)
{
include_once “/var/www/html/xhprof_lib/utils/xhprof_lib.php”;
include_once “/var/www/html/xhprof_lib/utils/xhprof_runs.php”;
xhprof_enable(); //start profiling
}

?>
//xhprofEnd.php 文件

<?php
if (TRUE    ==  $XHPROF_DEBUG)
{
//stop profiler
$xhprof_data    =   xhprof_disable();
$xhprof_runs    =   new XHProfRuns_Default();
$run_id         =   $xhprof_runs->save_run($xhprof_data, “xhprof_foo”);
echo “—————\n”.
“<a href=’/xhprof_html/index.php?run=$run_id&source=xhprof_foo’>xhprof</a>\n”.
“—————\n”;
}
echo ‘<!– xhprof –>’;
?>
程序中應用:

include /var/www/html/xhprofStart.php
// run program
….
include /var/www/html/xhprofEnd.php
將profile開關程序放在你所要進行分析的程序部分,就會將運行結果保存在xhprof.output_dir ini參數指定的特定目錄下。
文件的名稱可能會是23dffaa3a3f66.xhprof_foo類似的文件; 兩部分分別是運行編號(23dffaa3a3f6)和命名空間(xhprof_foo)。
最後,一些術語解釋:
1. Inclusive Time (或子樹時間):包括子函數所有執行時間。
2. Exclusive Time/Self Time:函數執行本身花費的時間,不包括子樹執行時間。
3. Wall時間:花去了的時間或掛鍾時間。
4. CPU時間:用戶耗的時間+內核耗的時間
更多:https://mirror.facebook.net/facebook/xhprof/doc.html

最後更新:2017-01-04 22:34:37

  上一篇:go 認識w3wp.exe進程,從根本上解決占用資源較大問題
  下一篇:go PHP裏麵上傳大體積文件時需要地配置