PHP性能追踪及分析工具xhprof的安装与使用
PHP性能追蹤及分析工具xhprof的安裝與使用
對于本地開發(fā)環(huán)境來說,進行性能分析xdebug是夠用了,但如果是線上環(huán)境的話,xdebug消耗較大,配置也不夠靈活,因此線上環(huán)境建議使用xhprof進行PHP性能追蹤及分析。
我們今天就簡單介紹一下xhprof的簡單安裝與使用
xhprof的安裝
下載xhprof,我們這里選擇的是通過git clone的方式,當然你也可以從 http://pecl.php.net/package/xhprof 這里下載。
cd /usr/local/src # 我自己漢化的版本 git clone https://github.com/maxincai/xhgui.git # 你可以clone原版 git clone https://github.com/phacility/xhprof.git注意:
php5.4及以上版本不能在pecl中下載,不支持。需要在github上下載hhttps://github.com/phacility/xhprof.git。
另外xhprof已經(jīng)很久沒有更新過了,截至目前還不支持php7,php7可以試使用https://github.com/tideways/php-profiler-extension。
安裝xhporof
cd xhprof/extension /usr/local/php5.6/bin/phpize ./configure --with-php-config=/usr/local/php5.6/bin/php-config --enable-xhprof make make install最后如果出現(xiàn)類似的提示信息,就表示編譯安裝成功
stalling shared extensions: /usr/local/php-5.6.14/lib/php/extensions/no-debug-non-zts-20131226/修改配置文件/etc/php5.6.ini,在最后增加如下配置
[xhprof] extension=xhprof.so xhprof.output_dir=wwwoutput重啟php-fpm后通過phpinfo查看,或者在命令行通過php -m | grep xhprof查看是否安裝成功。
注意:
需要創(chuàng)建output_dir
mkdir -p /data/www/xhprof/output
xhprof的簡單用法
將下載的xhprof復(fù)制到webroot目錄,我這里以/data/www/project-xhprof為例
mkdir /data/www/project-xhprof cp -R /usr/local/src/xhprof/* /data/www/project-xhprof/ cd /data/www/project-xhprof在nginx中增加站點配置
server {listen 80;server_name xhprof.dev;root /data/www/project-xhprof;index index.php index.html;access_log /var/log/nginx/xhprof.dev.log main;error_log /var/log/nginx/xhprof.dev.log.err debug;rewrite_log on;location ~* \.php$ {include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_pass unix:/var/run/php5.6-fpm.sock;fastcgi_index index.php;} }重啟nginx,然后使用http://xhprof.dev/examples/sample.php,可以看到一些輸出,并且提示通過訪問http://
分析一下示例代碼sample.php,關(guān)健代碼:
// 開始分析 xhprof_enable();// 運行一些函數(shù) foo();// 停止分析,得到分析數(shù)據(jù) $xhprof_data = xhprof_disable();$xhprof_data中記錄了程序運行過程中所有的函數(shù)調(diào)用時間及CPU內(nèi)存消耗,具體記錄哪些指標可以通過xhprof_enable的參數(shù)控制,目前支持的參數(shù)有:
- HPROF_FLAGS_NO_BUILTINS 跳過所有內(nèi)置(內(nèi)部)函數(shù)。
- XHPROF_FLAGS_CPU 輸出的性能數(shù)據(jù)中添加 CPU 數(shù)據(jù)。
- XHPROF_FLAGS_MEMORY 輸出的性能數(shù)據(jù)中添加內(nèi)存數(shù)據(jù)。
之后的處理已經(jīng)與xhprof擴展無關(guān),大致是編寫一個存儲類XHProfRuns_Default,將$xhprof_data序列化并保存到某個目錄,可以通過XHProfRuns_Default(__DIR__)將結(jié)果輸出到當前目錄,如果不指定則會讀取php.ini配置文件中的xhprof.output_dir,仍然沒有指定則會輸出到/tmp。
xhprof_html/index.php將記錄的結(jié)果整理并可視化,默認的UI里列出了:
- funciton name : 函數(shù)名
- calls: 調(diào)用次數(shù)
- Incl. Wall Time (microsec): 函數(shù)運行時間(包括子函數(shù))
- IWall%:函數(shù)運行時間(包括子函數(shù))占比
- Excl. Wall Time(microsec):函數(shù)運行時間(不包括子函數(shù))
- EWall%:函數(shù)運行時間(不包括子函數(shù))
在xhprof_html/index.php中還可以看到[View Full Callgraph]鏈接,點擊后可以繪制出一張可視化的性能分析圖,如果點擊后報錯的話,可能是缺少依賴graphviz,
graphviz是一個繪制圖形的工具,可以更為直觀的讓你查看性能的瓶頸。
或者直接使用yum安裝
yum install -y libpng yum install -y graphviz這時候就可以看到類似下面的效果
優(yōu)雅的接入現(xiàn)有項目
通過上面的這些介紹,我們其實就已經(jīng)可以將xhprof整合到任何我們已有的項目中,目前大部份的MVC框架都有唯一的入口文件,只需要在入口文件的開始處注入xhprof的代碼:
//開啟xhprof xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);//在程序結(jié)束后收集數(shù)據(jù) register_shutdown_function(function() {$xhprof_data = xhprof_disable();//讓數(shù)據(jù)收集程序在后臺運行if (function_exists('fastcgi_finish_request')) {fastcgi_finish_request();}//保存xhprof數(shù)據(jù)... });我們不可能在我們需要分析的所有地方都加上,但是這樣免不了要修改項目的源代碼,其實php本身就提供了更好的注入方式,比如將上述邏輯保存為/data/www/xhprof/inject.php,然后修改php配置文件中的auto_prepend_file配置
auto_prepend_file = wwwinject.php對于 Apache 服務(wù)器,添加以下代碼:
php_admin_value auto_prepend_file "/data/www/xhprof/inject.php"對于 Nginx 服務(wù)器,在服務(wù)器配置中添加以下代碼:
fastcgi_param PHP_VALUE "auto_prepend_file=/data/www/xhprof/inject.php";這樣所有的php請求文件都會自動注入/data/www/xhprof/inject.php這個文件,這樣侵入性更小,并且可以實現(xiàn)基于站點的注入。
更漂亮的數(shù)據(jù)展示xhgui
注入代碼后我們還需要實現(xiàn)保存xhprof數(shù)據(jù)以及展示數(shù)據(jù)的UI,現(xiàn)有的兩個比較流行的兩個輪子是 xhprof.io 和 xhgui 兩個項目都差不多,但綜合比較起來xhprof.io年久失修,xhgui還比較活躍,UI界面也相對比較美觀,我這里就選擇xhgui進行數(shù)據(jù)展示了。
安裝xhgui
- 從github中clone代碼至站點目錄/data/www/project-xhgui
-
設(shè)置緩存目錄的權(quán)限,允許nginx創(chuàng)建文件
chmod -R 777 -
啟動mongodb實例,如果mongodb如沒有使用默認的端口和配置,或者有使用安全驗證,剛需要修改config/config.php中的相關(guān)配置,我們這里使用的是默認配置,就不作修改了。
-
為提高 MongoDB 的性能,你可以運行以下指令以添加索引:
-
安裝mongodb的PHP擴展
```
wget http://pecl.php.net/get/mongodb-1.1.9.tgz
tar zxvf mongodb-1.1.9.tgz
cd mongodb-1.1.9
/usr/local/php5.6/bin/phpize
./configure --with-php-config=/usr/local/php5.6/bin/php-config
make && make install
vim /etc/php5.6.ini在文件最后增加
[mongo]
extension=mongo.so
查看是否安裝成功
php -m | grep mongo
重啟php-fpm
/etc/init.d/php5.6-fpm restart
* 運行XHGui的安裝腳本。安裝腳本將通過composer安裝XHGui的相關(guān)依賴。php install.php
如果上面的命令執(zhí)行報錯,則執(zhí)行下面的命令
composer install
* 配置web服務(wù)器,我們這里以nginx為例server {
listen 80;
server_name xhgui.dev;
root /data/www/project-xhgui/webroot;
index index.php index.html;
access_log /var/log/nginx/xhgui.dev.log main;
error_log /var/log/nginx/xhgui.dev.log.err debug;
rewrite_log on;
}
配置完成后重啟nginx,這時候打開`http://xhgui.dev/`,就可以看到類似下面的頁面 修改`/etc/php5.6.ini`中的`auto_prepend_file`配置完成xhgui的接入auto_prepend_file = /data/www/project-xhgui/external/header.php
```
xhgui的具體使用
最近運行
也可以按時間范圍和請求的地址進行搜索
可以按執(zhí)行時間、CPU時間、內(nèi)存占用進行排序
可以點擊一個地址進去看這個地址的最近趨勢
一次運行的詳細
一個函數(shù)的運行詳細
一次運行的函數(shù)調(diào)用圖
一次運行的火焰圖
對比多次請求
添加觀察函數(shù)
參考
- 使用xhprof進行線上PHP性能追蹤及分析
- PHP性能分析——xhprof
- PHP 性能分析第一篇: Xhprof & Xhgui 介紹
- PHP 性能分析第二篇: Xhgui In-Depth
- PHP 性能分析第三篇: 性能調(diào)優(yōu)實戰(zhàn)
來源:http://www.cnblogs.com/maxincai/p/6001459.html
總結(jié)
以上是生活随笔為你收集整理的PHP性能追踪及分析工具xhprof的安装与使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php轻量级的性能分析工具xhprof的
- 下一篇: 买基金注意事项有哪些 要分清基金的类型