2021-05-12 14:32:11
php效能監測模組XHProf
2020-06-16 17:53:06
一,什麼是XHProf
XHProf是一個分層PHP效能分析工具。它報告函數級別的請求次數和各種指標,包括阻塞時間,CPU時間和記憶體使用情況。一個函數的開銷,可細分成呼叫者和被呼叫者的開銷,XHProf資料收集階段,它記錄呼叫次數的追蹤和包容性的指標弧在動態callgraph的一個程式。它獨有的資料計算的報告/後處理階段。在資料收集時,XHProfd通過檢測迴圈來處理遞回的函數呼叫,並通過給遞回呼叫中每個深度的呼叫一個有用的命名來避開死迴圈。XHProf分析報告有助於理解被執行的程式碼的結構,它有一個簡單的HTML的使用者介面( PHP寫成的)。基於瀏覽器的效能分析使用者介面能更容易檢視,或是與同行們分享成果。也能繪製呼叫關係圖。
二,安裝XHProf擴充套件模組
1,安裝
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxvf xhprof-0.9.2.tgz
cp ./xhprof-0.9.2.tgz./www //xhprof自身帶有一個web版的分析頁面,放到我的web伺服器下面
cd xhprof-0.9.2/extension
/usr/local/php/bin/phpize
./configure --enable-xhprof --with-php-config=/usr/local/php/bin/php-config
make && make install
2,設定
[xhprof]
extension=xhprof.so
xhprof.output_dir=/home/yicheng/xhprof //如果不加存放目錄的話,預設是放在/tmp下面
三,XHProf測試
前面我們說過了,XHProf自身帶有一個web版的測試工具,裡面還有一個小例子。看一下這個例子,我做了一點修改和注釋
<?php
function bar($x){
if($x >0){
bar($x -1);
}
}
function foo(){
for($idx =0; $idx <5; $idx++){
bar($idx);
$x = strlen("abc");
}
}
//啟動xhprof
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
//呼叫foo函數,也是我們要分析的函數
foo();
//停止xhprof
$xhprof_data = xhprof_disable();
//取得統計資料
print_r($xhprof_data);
$XHPROF_ROOT = realpath(dirname(__FILE__).'/..');
include_once $XHPROF_ROOT ."/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT ."/xhprof_lib/utils/xhprof_runs.php";
//儲存統計資料,生成統計ID和source名稱
$xhprof_runs =newXHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data,"xhprof_foo");//source名稱是xhprof_foo
//彈出一個統計視窗,檢視統計資訊
echo "<script language='javascript'>window.open('../xhprof_html/index.php?run=". $run_id ."&source=xhprof_foo');</script>";
?>
以下是部分的結果:
[foo==>bar]=>Array
(
[ct]=>5//bar()這個函數被呼叫了5次
[wt]=>63//每次執行bar()所要的時間,不知道這個是不是平均值
[cpu]=>0//每次執行bar(),cpu運算時間
[mu]=>2860//每次執行bar(),php所使用記憶體的改變
[pmu]=>0//每次執行bar(),php在記憶體使用最高峰時,所使用記憶體的改變
)
個人覺得,這個工具是給變態人用的,有誰真正測試過,php程式碼執行效率?我估計沒有,只要不隨心所欲的寫程式碼,差別不是很大,花時間在上面,還不如想想怎麼提高資料庫的處理能力。如果自認為其他方面都做的很好了,在這方面做做也沒關係。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-09/123068.htm
相關文章