下面小編就為大家分享一篇使用XHProf尋找PHP效能瓶頸的執行個體,具有很好的參考價值,希望對大家有所協助。一起跟隨小編過來看看吧
XHProf是facebook 開發的一個測試php效能的擴充,本文記錄了在PHP應用中使用XHProf對PHP進行效能最佳化,尋找效能瓶頸的方法。
一、安裝Xhprof擴充
//github上下載https://github.com/facebook/xhprofunzip xhprof-master.zip cd xhprof-master/extension//usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-config --enable-xhprofmake && make install
二、修改php.ini
[xhprof]extension=xhprof.soxhprof.output_dir=/tmp
配置中xhprof.output_dir指定了產生的profile檔案儲存體的位置,我們將其指定為/tmp。
三、將相關檔案移動項目中
//xhprof下載壓縮包中的xhprof_html和xhprof_libcp -r xhprof-master/xhprof_html /usr/local/nginx/html/xhprof/cp -r xhprof-master/xhprof_lib /usr/local/nginx/html/xhprof/
配置一個網域名稱,瀏覽器可以訪問到 http://will.com/xhprof/xhprof_html/index.php
server{ listen 80; server_name will.com; location / { root /usr/local/nginx/html; index index.html; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
四、安裝graphivz
//需要安裝graphviz否則查看效能圖片時候會報failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found 'yum -y install graphviz
五、編寫測試檔案
//入口檔案的開始位置xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);商務邏輯...//商務邏輯結束後$xhprof_data = xhprof_disable();include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_runs.php"; $objXhprofRun = new XHProfRuns_Default();//資料會儲存在php.ini中xhprof.output_dir設定的目錄去中 $run_id = $objXhprofRun->save_run($xhprof_data, "test");
完整程式碼範例(隨機滿減紅包demo)
<?phpxhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);function show($info){ echo "<pre>"; print_r($info);}//不作資料校正$rules = array( 2=>array('min'=>1, 'max'=>10, 'chance'=>30),//金額:分 機率:百分之(預設為100%,不足100%按第一檔計算) array('min'=>11, 'max'=>25, 'chance'=>60), array('min'=>26, 'max'=>50, 'chance'=>10), array('min'=>50, 'max'=>80, 'chance'=>0), array('min'=>80, 'max'=>100, 'chance'=>0),);$total_money = 10000;//紅包總金額$res = array();while($total_money>0){ $index = getLevel($rules); $money = setMoney($rules, $index); if ($money > $total_money)//金額不足 { $money = $total_money; $total_money = 0; } else { $total_money -= $money; } $res[] = ($index+1)."---".$money;}echo show($res);echo $total_money . "<br/>";//1.先確定檔次function getLevel($rules){ $level = array(); $chance = 0; foreach($rules as $k=>$v) { if ($v['chance']>0) { $chance += $v['chance']*100;//擴大100倍 $level[$k] = $chance; } } $index = 0; $rand_num = mt_rand(1, 10000); foreach($level as $k=>$v) { if ($rand_num <= $v) { $index = $k; break; } } return $index;}//2.確定檔次之後,再確定金額function setMoney($rules, $index){ $money = mt_rand($rules[$index]['min']*10000, $rules[$index]['max']*10000)/10000; $money = ceil($money); $money > 1 && $money = $money -1;//防止出現免單情況 return $money;}$xhprof_data = xhprof_disable();include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_runs.php"; $objXhprofRun = new XHProfRuns_Default();//資料會儲存在php.ini中xhprof.output_dir設定的目錄去中 $run_id = $objXhprofRun->save_run($xhprof_data, "test");echo "http://will.com/xhprof/xhprof_html/index.php?run=$run_id&source=test";//變數$runId是本次請求產生分析結果的id,最後我們輸出了一個連結地址,使用改地址就可以看到本次請求的分析結果。
六、查看分析結果
先運行業務代碼;
然後瀏覽器開啟 http://will.com/xhprof/xhprof_html/index.php, 點擊最後一次產生xhprof檔案
注意到中間的View Full Callgraph
連結,通過該連結我們可以看到圖形化的分析結果
圖中紅色的部分為效能比較低,耗時比較長的部分,我們可以根據根據哪些函數被標記為紅色對系統的代碼進行最佳化
另外附上, xhprof報告欄位含義:
Function Name:方法名稱。
Calls:方法被調用的次數。
Calls%:方法調用次數在同級方法總數調用次數中所佔的百分比。
Incl.Wall Time(microsec):方法執行花費的時間,包括子方法的執行時間。(單位:微秒)
IWall%:方法執行花費的時間百分比。
Excl. Wall Time(microsec):方法本身執行花費的時間,不包括子方法的執行時間。(單位:微秒)
EWall%:方法本身執行花費的時間百分比。
Incl. CPU(microsecs):方法執行花費的CPU時間,包括子方法的執行時間。(單位:微秒)
ICpu%:方法執行花費的CPU時間百分比。
Excl. CPU(microsec):方法本身執行花費的CPU時間,不包括子方法的執行時間。(單位:微秒)
ECPU%:方法本身執行花費的CPU時間百分比。
Incl.MemUse(bytes):方法執行佔用的記憶體,包括子方法執行佔用的記憶體。(單位:位元組)
IMemUse%:方法執行佔用的記憶體百分比。
Excl.MemUse(bytes):方法本身執行佔用的記憶體,不包括子方法執行佔用的記憶體。(單位:位元組)
EMemUse%:方法本身執行佔用的記憶體百分比。
Incl.PeakMemUse(bytes):Incl.MemUse峰值。(單位:位元組)
IPeakMemUse%:Incl.MemUse峰值百分比。
Excl.PeakMemUse(bytes):Excl.MemUse峰值。單位:(位元組)
EPeakMemUse%:Excl.MemUse峰值百分比。
以上這篇使用XHProf尋找PHP效能瓶頸的執行個體就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援php中文網。
您可能感興趣的文章:
Laravel架構中自訂模板指令相關總結
PHP遞迴實現快速排序的方法樣本講解
PHP實現git部署的方法教程詳解