這篇文章帶給大家的內容是關於php中的擴充Xhprof如何分析專案的效能,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
專案即將上線,想透過一些工具來分析程式碼的穩定性和效率,想起在上個團隊時使用過的xhprof擴充;因為換了新電腦,所以需要重新編譯此擴展,現將安裝與實際排查過程完整記錄下來,方便自己回顧和幫助更多的讀者。
安裝擴充功能
#設定擴充功能
xhprof擴充PHP並不自帶,需要筆者去單獨安裝它,安裝之後才能使用,筆者這裡採用源碼安裝方式,安裝流程如下
xhprof在PHP的PECL官方上面已經比較老了,筆者的PHP版本為PHP7.1因此,需要在GitHub上下載xhprof上比較新的原始碼,參考指令如下
git clone https://github.com/longxinH/xhprof
3.2 偵測環境
進入編譯的資料夾,參考指令
cd xhprof/extension/
phpize
傳回結果如下
Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 320160303
3.3 編譯安裝
產生Makefile,為下一步的編譯做準備
./configure
返回結果如下
creating libtool appending configuration tag "CXX" to libtool configure: creating ./config.status config.status: creating config.h config.status: config.h is unchanged
開始編譯,並進行安裝
make && make install
Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/
從返回資訊中可以看到已經安裝完成,並顯示了擴展檔案存放的位置
在編譯安裝原始碼之後,筆者還需要對PHP的設定資料夾以及xhprof的進行一些簡單的配置,操作過程如下所示
4.1 找出設定檔位置
要修改PHP的設定首先需要知道設定檔在什麼位置,這裡可以透過PHP的指令來檢視設定檔存放位置,參考指令如下: <pre class="brush:php;toolbar:false">php --ini</pre>
執行指令後,回傳結果如下
Configuration File (php.ini) Path: /usr/local/etc/php/7.1 Loaded Configuration File: /usr/local/etc/php/7.1/php.ini Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d Additional .ini files parsed: /usr/local/etc/php/7.1/conf.d/ext-opcache.ini
在回傳結果當中,可以看到多個設定檔的路徑,筆者所需要的是第二個檔案
php.inicat /usr/local/etc/php/7.1/php.ini | grep extension_dir
傳回結果如下
extension_dir = "/usr/local/lib/php/pecl/20160303" ; extension_dir = "ext" ; Be sure to appropriately set the extension_dir directive. ;sqlite3.extension_dir =
4.2 修改設定
從傳回的結果當中,可以看到擴展的存放目錄位置如下
/usr/local/lib/php/pecl/20160303
現在需要將剛才編譯好的xhprof擴展複製到該目錄當中,參考命令如下
cp /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/xhprof.so /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/
vim /usr/local/etc/php/7.1/php.ini
在設定檔尾部增加xhprof的配置,以及自訂一個用來保存xhprof產生的來源檔案參考配置如下
[xhprof] extension=xhprof.so xhprof.output_dir=/data/www/xhprof/save_output_dir
4.3 重啟生效
#儲存好之後,筆者重啟php-fpm讓其設定生效,重啟指令可以透過brew指令來查看,參考指令如下:
brew info php@7.1
在指令執行後,傳回的訊息中可以看到如下資訊
To have launchd start php@7.1 now and restart at login: brew services start php@7.1 Or, if you don't want/need a background service you can just run: php-fpm
brew services restart php@7.1
重啟完成後,回傳結果如下
Stopping `php@7.1`... (might take a while) ==> Successfully stopped `php@7.1` (label: homebrew.mxcl.php@7.1) ==> Successfully started `php@7.1` (label: homebrew.mxcl.php@7.1)
4.4 驗證安裝
##現在驗證xhprof擴充功能是否已經安裝完成,參考指令如下php -m | grep xhprof指令執行後,安裝擴充功能成功的回傳結果將會顯示xhprof,如下圖所示
五、測試經過上面的操作筆者已經成功的安裝與配置,現在需要用PHP程式碼來進行驗證xhprof的分析效果5.1 建立虛擬主機首先建立一個虛擬主機,讓使用者可以透過瀏覽器存取所訪問,建立虛擬主機需要有一個根目錄,並編輯nginx設定文件,具體操作如下:5.1. 1 建立專案目錄建立專案根目錄,參考指令如下
mkdir -p /Users/song/mycode/work/test
cp -r xhprof/xhprof_html /Users/song/mycode/work/test/ cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/5.1.2 編輯設定檔新增設定檔,參考指令
/usr/local/etc/nginx/nginx.conf
新增設定檔如下
server { listen 80; server_name test.localhost; root /Users/song/mycode/work/test; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }在
127.0.0.1 test.localhost
5.2 新測試程式碼
在git倉庫的examples
資料夾下,已經有了一份demo程式碼,不過這份程式碼的註解都是英文,而且排版方式也不易筆者自己理解,因此筆者重新編輯了此文件,參考步驟如下命令使用vim新建一個PHP檔案vim /Users/song/mycode/work/test/test.php在檔案中加入以下程式碼
<?php //加载所需文件 include_once "./xhprof_lib/utils/xhprof_lib.php"; include_once "./xhprof_lib/utils/xhprof_runs.php"; //随意定义一个函数 function test($max) { for ($idx = 0; $idx < $max; $idx++) { echo ''; } } //定义测试方法 function a() { test(rand(1000,5000)); } //开始分析 xhprof_enable(); //需要分析的函数 a(); //结束分析 $xhprof_data = xhprof_disable(); //实例化xhprof类 $xhprof_runs = new XHProfRuns_Default(); //获取当前当前页面分析结果 $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo"); echo "\nhttp://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n";
http://test.localhost/xhprof/test.php5.3 結果分析
運行後結果,如下圖
######在頁面中可以看到一個URL位址,複製並開啟此URL位址之後,便能看到此程式碼的分析結果,如下圖所示###
在頁面中有一個列表,展示了每一個方法所消耗的時間,如果覺得列表的方式表示不夠清晰,點擊頁面中的View Full Callgraph
連結可以直接產生一個圖片,如下圖所示
在圖中很清晰的可以看到執行時間都消耗在test方法上,因此筆者可以針對這個方法進行針對性的最佳化。
相關推薦:
以上是php中的擴充Xhprof如何分析專案的效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!