摘要:為提高的性能,你可以運行以下指令以添加索引安裝的擴展在文件最后增加查看是否安裝成功重啟運行的安裝腳本。
PHP性能追蹤及分析工具xhprof的安裝與使用
對于本地開發環境來說,進行性能分析xdebug是夠用了,但如果是線上環境的話,xdebug消耗較大,配置也不夠靈活,因此線上環境建議使用xhprof進行PHP性能追蹤及分析。
我們今天就簡單介紹一下xhprof的簡單安裝與使用
xhprof的安裝下載xhprof,我們這里選擇的是通過git clone的方式,當然你也可以從 http://pecl.php.net/package/x... 這里下載。
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已經很久沒有更新過了,截至目前還不支持php7,php7可以試使用https://github.com/tideways/p...。
安裝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
最后如果出現類似的提示信息,就表示編譯安裝成功
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=/data/www/xhprof/output
重啟php-fpm后通過phpinfo查看,或者在命令行通過php -m | grep xhprof查看是否安裝成功。
注意:
需要創建output_dir
mkdir -p /data/www/xhprof/output
將下載的xhprof復制到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,關健代碼: $xhprof_data中記錄了程序運行過程中所有的函數調用時間及CPU內存消耗,具體記錄哪些指標可以通過xhprof_enable的參數控制,目前支持的參數有: HPROF_FLAGS_NO_BUILTINS 跳過所有內置(內部)函數。
XHPROF_FLAGS_CPU 輸出的性能數據中添加 CPU 數據。
XHPROF_FLAGS_MEMORY 輸出的性能數據中添加內存數據。
之后的處理已經與xhprof擴展無關,大致是編寫一個存儲類XHProfRuns_Default,將$xhprof_data序列化并保存到某個目錄,可以通過XHProfRuns_Default(__DIR__)將結果輸出到當前目錄,如果不指定則會讀取php.ini配置文件中的xhprof.output_dir,仍然沒有指定則會輸出到/tmp。
xhprof_html/index.php將記錄的結果整理并可視化,默認的UI里列出了:
funciton name : 函數名
calls: 調用次數
Incl. Wall Time (microsec): 函數運行時間(包括子函數)
IWall%:函數運行時間(包括子函數)占比
Excl. Wall Time(microsec):函數運行時間(不包括子函數)
EWall%:函數運行時間(不包括子函數)
在xhprof_html/index.php中還可以看到[View Full Callgraph]鏈接,點擊后可以繪制出一張可視化的性能分析圖,如果點擊后報錯的話,可能是缺少依賴graphviz,
graphviz是一個繪制圖形的工具,可以更為直觀的讓你查看性能的瓶頸。
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz cd graphviz-2.24.0 ./configure make && make install
或者直接使用yum安裝
yum install -y libpng yum install -y graphviz
這時候就可以看到類似下面的效果
通過上面的這些介紹,我們其實就已經可以將xhprof整合到任何我們已有的項目中,目前大部份的MVC框架都有唯一的入口文件,只需要在入口文件的開始處注入xhprof的代碼:
我們不可能在我們需要分析的所有地方都加上,但是這樣免不了要修改項目的源代碼,其實php本身就提供了更好的注入方式,比如將上述邏輯保存為/data/www/xhprof/inject.php,然后修改php配置文件中的auto_prepend_file配置
auto_prepend_file = /data/www/xhprof/inject.php對于 Apache 服務器,添加以下代碼:
php_admin_value auto_prepend_file "/data/www/xhprof/inject.php"對于 Nginx 服務器,在服務器配置中添加以下代碼:
fastcgi_param PHP_VALUE "auto_prepend_file=/data/www/xhprof/inject.php";這樣所有的php請求文件都會自動注入/data/www/xhprof/inject.php這個文件,這樣侵入性更小,并且可以實現基于站點的注入。
更漂亮的數據展示xhgui注入代碼后我們還需要實現保存xhprof數據以及展示數據的UI,現有的兩個比較流行的兩個輪子是 xhprof.io 和 xhgui 兩個項目都差不多,但綜合比較起來xhprof.io年久失修,xhgui還比較活躍,UI界面也相對比較美觀,我這里就選擇xhgui進行數據展示了。
安裝xhgui
從github中clone代碼至站點目錄/data/www/project-xhgui
mkdir /data/www/project-xhgui cd /data/www/project-xhgui git clone https://github.com/perftools/xhgui.git ./設置緩存目錄的權限,允許nginx創建文件
chmod -R 777啟動mongodb實例,如果mongodb如沒有使用默認的端口和配置,或者有使用安全驗證,剛需要修改config/config.php中的相關配置,我們這里使用的是默認配置,就不作修改了。
為提高 MongoDB 的性能,你可以運行以下指令以添加索引:
$ /usr/local/mongodb/bin/mongo > use xhprof db.results.ensureIndex( { "meta.SERVER.REQUEST_TIME" : -1 } ) db.results.ensureIndex( { "profile.main().wt" : -1 } ) db.results.ensureIndex( { "profile.main().mu" : -1 } ) db.results.ensureIndex( { "profile.main().cpu" : -1 } ) db.results.ensureIndex( { "meta.url" : 1 } )安裝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的相關依賴。
php install.php # 如果上面的命令執行報錯,則執行下面的命令 composer install配置web服務器,我們這里以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; location / { try_files $uri $uri/ /index.php?$uri&$args; } 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://xhgui.dev/,就可以看到類似下面的頁面
修改/etc/php5.6.ini中的auto_prepend_file配置完成xhgui的接入
auto_prepend_file = /data/www/project-xhgui/external/header.phpxhgui的具體使用 最近運行也可以按時間范圍和請求的地址進行搜索
可以按執行時間、CPU時間、內存占用進行排序
可以點擊一個地址進去看這個地址的最近趨勢
一次運行的詳細 一個函數的運行詳細 一次運行的函數調用圖 一次運行的火焰圖 對比多次請求添加觀察函數
參考
使用xhprof進行線上PHP性能追蹤及分析
PHP性能分析——xhprof
PHP 性能分析第一篇: Xhprof & Xhgui 介紹
PHP 性能分析第二篇: Xhgui In-Depth
PHP 性能分析第三篇: 性能調優實戰
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21982.html
摘要:什么是開源的輕量級性能分析工具。它報告函數級別的請求次數和各種指標,包括阻塞時間,時間和內存使用情況。基于瀏覽器的性能分析用戶界面能更容易查看,或是與同行們分享成果。對于本地開發環境來說,進行性能分析是夠用了。 什么是 XHPROF? XHPROF:Facebook 開源的輕量級PHP性能分析工具。 它報告函數級別的請求次數和各種指標,包括阻塞時間,CPU時間和內存使用情況。 XHPr...
摘要:上一篇文章里,我們介紹了如何基于擴展來分析性能,并記錄到日志里,最后使用擴展自帶的在里展示出來。本次測試中,實際使用了擴展切換為擴展后里看不到數據,原因未知。雖然來自但已經很久不更新,官方源已經顯示此包已廢棄,不再維護。 上一篇文章里,我們介紹了如何基于xhprof擴展來分析PHP性能,并記錄到日志里,最后使用xhprof擴展自帶的UI在web里展示出來。本篇文章將講述2個知識點: ...
摘要:的一鍵安裝開發環境非侵入式監控平臺優化系統性能定位的神器之前在用做本地開發環境,因為沒有這些對程序性能追蹤及分析的工具,所以索性基于的編排了一套自己使用。 DNMP PLUS dnmp = Docker + Nginx + MySQL + PHP + Redis + MongDB plus = xhgui + xhprof + tideways dnmp-plus = PHPer 的一...
摘要:性能被動分析工具之加的安裝實踐前言最近一直想做個接口性能分析,但是手打實在能把人給累死。怎么辦呢想到之前有寫過一篇我所知道的相關調優匯總,里面有一個的調優方式。但是使用它酷炫的需要付費,擴展則不需要。 PHP性能被動分析工具之xhgui加tideways的安裝實踐 By:0x584A Date:2016-11-23 17:55:42 前言 最近一直想做個接口性能分析,但是手打log實在...
摘要:它報告函數級別的請求次數和各種指標,包括阻塞時間,時間和內存使用情況。它獨有的數據計算的報告后處理階段。在數據收集時,通過檢測循環來處理遞歸的函數調用,并通過給遞歸調用中每個深度的調用一個有用的命名來避開死循環。 簡介 XHProf是一個分層PHP性能分析工具。XHProf是一個分層PHP性能分析工具。它報告函數級別的請求次數和各種指標,包括阻塞時間,CPU時間和內存使用情況。一個函數...
閱讀 1179·2021-09-27 13:34
閱讀 985·2021-09-13 10:25
閱讀 513·2019-08-30 15:52
閱讀 3452·2019-08-30 13:48
閱讀 653·2019-08-30 11:07
閱讀 2174·2019-08-29 16:23
閱讀 1998·2019-08-29 13:51
閱讀 2333·2019-08-26 17:42