mkdir -p /Users/song/mycode/work/test
php中的擴充Xhprof如何分析專案的效能
這篇文章帶給大家的內容是關於php中的擴充Xhprof如何分析專案的效能,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
一、背景
專案即將上線,想透過一些工具來分析程式碼的穩定性和效率,想起在上個團隊時使用過的xhprof擴充;因為換了新電腦,所以需要重新編譯此擴展,現將安裝與實際排查過程完整記錄下來,方便自己回顧和幫助更多的讀者。
二、操作步驟
安裝擴充功能
#設定擴充功能
##測試分析
三、安裝
xhprof擴充PHP並不自帶,需要筆者去單獨安裝它,安裝之後才能使用,筆者這裡採用源碼安裝方式,安裝流程如下
3.1 下載原始碼
xhprof在PHP的PECL官方上面已經比較老了,筆者的PHP版本為PHP7.1因此,需要在GitHub上下載xhprof上比較新的原始碼,參考指令如下
git clone https://github.com/longxinH/xhprof
3.2 偵測環境
進入編譯的資料夾,參考指令
cd xhprof/extension/
現在筆者需要編譯一下原始碼,在編譯之前可以使用phpze來探測PHP的環境,參考指令如下:
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的指令來檢視設定檔存放位置,參考指令如下: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">php --ini</pre><div class="contentsignin">登入後複製</div></div>
執行指令後,回傳結果如下
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.ini查看擴充目錄存放位置,參考指令如下
cat /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編輯器編輯配置文件,參考命令如下
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
因此筆者建構的重啟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

五、測試經過上面的操作筆者已經成功的安裝與配置,現在需要用PHP程式碼來進行驗證xhprof的分析效果5.1 建立虛擬主機首先建立一個虛擬主機,讓使用者可以透過瀏覽器存取所訪問,建立虛擬主機需要有一個根目錄,並編輯nginx設定文件,具體操作如下:5.1. 1 建立專案目錄建立專案根目錄,參考指令如下
mkdir -p /Users/song/mycode/work/test
登入後複製
建立成功之後,筆者需要將先前git拉下來的部分程式碼複製到專案根目錄當中,參考指令如下
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/
/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; } }
/etc/hosts
檔案中增加入一行解析記錄,記錄內容如下: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";
登入後複製
儲存程式碼之後,透過瀏覽器存取對應的URL位址,URL位址如下所示
<?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.php
運行後結果,如下圖
在頁面中有一個列表,展示了每一個方法所消耗的時間,如果覺得列表的方式表示不夠清晰,點擊頁面中的View Full Callgraph
連結可以直接產生一個圖片,如下圖所示
在圖中很清晰的可以看到執行時間都消耗在test方法上,因此筆者可以針對這個方法進行針對性的最佳化。
相關推薦:
以上是php中的擴充Xhprof如何分析專案的效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
