PHP7 下安裝並使用 xhprof 性能分析工具

xhprof 的安裝

該 xhprof 版本是從 https://github.com/longxinH/xhprof 獲取,若有更好的選擇,煩請聯繫我。php

cd ~
git clone https://github.com/longxinH/xhprof

安裝 xhprof

cd xhprof/extension/
/opt/php-7.0.14/bin/phpize
./configure --with-php-config=/opt/php-7.0.14/bin/php-config --enable-xhprof
make
make install

出現html

Installing shared extensions:     /opt/php-7.0.14/lib/php/extensions/no-debug-non-zts-20151012/

表明編譯成功git

修改 php.ini 文件

/opt/php-7.0.14/bin/php -i | grep php.ini //命令查找php.ini文件的位置

/etc/php.ini中增長以下配置github

[xhprof]
extension=xhprof.so
xhprof.output_dir=/data/www/xhprof/save_output_dir //該目錄自由定義便可,用來保存xhprof生成的源文件

保存好以後,重啓php-fpmcentos

kill -USR2 `cat /opt/php-7.0.14/var/run/php-fpm.pid`

將相關文件移動到項目中

//切換到下載的 xhprof 目錄
cp -r xhprof/xhprof_html  ROOT_PATH/
cp -r xhprof/xhprof_lib ROOT_PATH/

使用

xhprof_enable();

//你須要分析的代碼

$xhprof_data = xhprof_disable();
include_once ROOT_PATH.'/xhprof_lib/utils/xhprof_lib.php';
include_once ROOT_PATH . '/xhprof_lib/utils/xhprof_runs.php';

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test");
//將run_id保存起來或者隨代碼一塊兒輸出

查看數據

訪問$host_url/xhpfrof_html/index.php?run=58d3b28b521f6&source=xhprof_test來查看結果瀏覽器

圖形化結果

點擊[View Full Callgraph]能夠看圖形化結果性能優化

報錯

failed to execute cmd:" dot -Tpng". stderr:sh: dot:command not found。函數

//解決方案
yum install graphviz

 

若是輸入瀏覽器沒有數據這種狀況:Run #530707980ee18: Invalid Run Id = 530707980ee18錯誤結果:error多是你的配置權限不足,請給個權限,能夠直接777,而後從新運行走後這個步驟看看效果。到這裏xhprof安裝就結束了,開始你的性能優化之旅吧,有了這個工具會事半功倍的~~對於xhprof的名詞解釋:php-fpm

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

錯誤處理:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

緣由:未安裝圖形化工具

yum install graphviz //centos  brew install graphviz //mac

界面優化:XHProf UI 分支

 

圖示

查看圖片

圖示

圖中紅色的部分爲性能比較低,耗時比較長的部分,咱們能夠根據根據哪些函數被標記爲紅色對系統的代碼進行優化

補充

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


參考:

http://www.jianshu.com/p/c420ebe6ce39

http://www.php.cn/php-weizijiaocheng-376423.html

https://www.oschina.net/question/1439832_2147576

相關文章
相關標籤/搜索