使用XHProf尋找PHP效能瓶頸的執行個體講解

來源:互聯網
上載者:User
下面小編就為大家分享一篇使用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部署的方法教程詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.