目錄
#前置建置docker 虛擬測試環境
1. 安裝xhprof
2. 使用xhprof
首頁 後端開發 PHP7 php7如何使用xhprof分析

php7如何使用xhprof分析

Jun 18, 2021 am 09:33 AM
php7

這篇文章跟大家介紹一下php7使用xhprof分析的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

php7如何使用xhprof分析

這是篇純文檔,如果以後有需要可以隨時查找, 使用xhprof 進行分析, 方便程式碼測試、比較分析(支援php7).

#前置建置docker 虛擬測試環境

docker run -it -p 80:80 -v /Users/xxx/Desktop/xhprof:/data phalcon /bin/bash
登入後複製

複製程式碼

1. 安裝xhprof

支援php7的xhprof還挺多的, 我們這裡使用github.com/longxinH /xh… 這個項目。

1.1 拉取項目

git clone https://github.com/longxinH/xhprof.git
登入後複製

複製程式碼

1.2 安裝專案

cd xhprof/extension/
/usr/server/php7/bin/phpize
./configure --with-php-config=/usr/server/php7/bin/php-config
make && make install
登入後複製

1.3 新增xhprof.so 拓展

執行完最後,我們需要將此so 檔案引入到php.ini配置下

查看php.ini 檔案路徑

/usr/server/php7/bin/php --ini
 
Configuration File (php.ini) Path: /usr/server/php7/etc
Loaded Configuration File: /usr/server/php7/etc/php.ini
Scan for additional .ini files in: /usr/server/php7/etc/php
Additional .ini files parsed: (none)
登入後複製
编辑 /usr/server/php7/etc/php.ini
[Xhprof]
extension=xhprof.so
xhprof.output_dir=/data/logs
登入後複製

重啟php-fpm 即可。

2. 使用xhprof

建立案例過程略

我們在要監控的邏輯前面嵌入下面程式碼

\xhprof_enable();
......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......
$xhprof_data = \xhprof_disable();
print_r($xhprof_data);
登入後複製

output:

#我們發現呼叫了xhprof拓展中的兩個函數, 輸出值意義

ct 表示目前這個函數呼叫的次數,此案例都是1次

wt 表示函數執行時間的耗時,單位為微秒

看到這裡發現, 我們獲取的資訊並不是很多, 例如我們經常還要關心佔用的記憶體、cpu等指標.

\xhprof_enable(
XHPROF_FLAGS_MEMORY
+XHPROF_FLAGS_CPU
+XHPROF_FLAGS_NO_BUILTINS
);
登入後複製

output:

  1. #XHPROF_FLAGS_MEMORY 統計記憶體佔用

  2. ## XHPROF_FLAGS_CPU 統計量cpu佔用

  3. XHPROF_FLAGS_NO_BUILTINS 不統計內建函數, 此輸出可以看到已經忽略了我們拓展中的函數

#我們發現統計記憶體佔用的欄位, 有兩個輸出mu 和pmu , mu 表示使用的記憶體(bytes), pmu 表示使用的記憶體峰值(bytes)

3. 圖表xhprof

當然,我們還是更希望圖表的形式可以更直觀的觀察性能瓶頸, 下面我們看下怎麼使用.

3.1 這時候需要我們用到xhprof_lib 庫

#在我們下載xhprof 原始碼時候,目錄中已經包含了
\xhprof_enable(XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_CPU+XHPROF_FLAGS_NO_BUILTINS);
 
......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......
 
$xhprof_data = \xhprof_disable();
 
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';
$xhprof_runs = new \XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, 'your_project');
echo $run_id; //output 5cbf25e21fe9b
登入後複製

執行打印出來一個字串, 這個我們可以理解為文件標識符. 我們發現執行了save_run 方法,那保存到哪裡了呢.

您還記得我們在引入xhprof.so 拓展時候的另一個配置嗎?

沒錯, 在xhprof.output_dir 配置的路徑下(需要自己手動建立下目錄)

有興趣可以打開看看, 裡面存了我們分析的一些序列化物件資訊.

3.2 配置一個單獨的服務來訪問我們的分析結果

我們指向我們xhprof專案中的xhprof_html 目錄

## 

## ##相信你到此明白了我們的run_id 和save_run中的project 的作用了#########我們最上面部分是請求的接口指標總覽, 下面是具體的每個調用函數的執行情況。 ######字段名含義Calls調用次數Incl. Wall Time調用的包括子函數所有花費時間,以微秒算Excl. Wall Time函數執行本身花費的時間,不包括子樹執行時間,以微秒算Incl. CPU呼叫的包括子函數所有花費的cpu時間Excl. CPU函數執行本身花費的cpu時間,不包括子樹執行時間,以微秒算Incl.MemUse包括子函數執行使用的內存, 以字節算Excl.MemUse函數執行本身記憶體,以位元組算Incl.PeakMemUseIncl.MemUse的峰值Excl.PeakMemUseExcl.MemUse的峰值#########其餘後面的% 結尾皆為對應的佔比### ######3.3 [View Full Callgraph]######也可以執行下面兩行程式碼安裝###
yum install -y libpng
yum install -y graphviz
登入後複製
###如果查看呼叫流程需要安裝graphviz 圖形庫。這裡我們推薦手動安裝graphviz 2.24 .0 這個版本(親自踩坑,2.40不支持)###
yum -y install libtool-ltdl-devel
 
cd /data/graphviz-2.24.0
 
./configure
make
make install
登入後複製
############# #########紅色部分和黃色部分重點關心下,如果感覺只想分析某個流程, 可以點擊到某個方法裡面再點擊【View Full Callgraph】查看圖表##########4. 問題點######我們在上面使用xhprof的時候發現了強烈依賴, 在程式碼中引入了xhprof 安裝套件裡的幾個類別.###
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';
登入後複製
###這裡我們可以使用composer套件引用來實現相同功能, 這裡推薦引入pbweb/xhprof 套件。 ######推薦學習:###php影片教學######

以上是php7如何使用xhprof分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

php7.0怎麼安裝mongo擴展 php7.0怎麼安裝mongo擴展 Nov 21, 2022 am 10:25 AM

php7.0安裝mongo擴充的方法:1、建立mongodb使用者群組和使用者;2、下載mongodb原始碼包,並將原始碼包放到“/usr/local/src/”目錄下;3、進入“src/”目錄;4、解壓縮原始碼包;5、建立mongodb檔案目錄;6、將檔案複製到「mongodb/」目錄;7、建立mongodb設定檔並修改設定即可。

php7檢測tcp埠不好用怎麼解決 php7檢測tcp埠不好用怎麼解決 Mar 22, 2023 am 09:30 AM

在php5中,我們可以使用fsockopen()函數來偵測TCP埠。這個函數可以用來開啟一個網路連接和進行一些網路通訊。但是在php7中,fsockopen()函數可能會遇到一些問題,例如無法開啟連接埠、無法連接到伺服器等。為了解決這個問題,我們可以使用socket_create()函數和socket_connect()函數來偵測TCP埠。

php7.0安裝了插件還是顯示未安裝怎麼辦 php7.0安裝了插件還是顯示未安裝怎麼辦 Apr 02, 2024 pm 07:39 PM

解決 PHP 7.0 中插件未顯示已安裝問題的方法:檢查插件配置並啟用插件。重新啟動 PHP 以套用配置變更。檢查插件檔案權限,確保其正確。安裝遺失的依賴項,以確保插件正常運作。如果其他步驟都失敗,則重建 PHP。其他可能原因包括外掛程式版本不相容、載入錯誤版本或 PHP 配置問題。

PHP 伺服器環境常見問題指南:快速解決常見難題 PHP 伺服器環境常見問題指南:快速解決常見難題 Apr 09, 2024 pm 01:33 PM

PHP伺服器環境常見的解決方法包括:確保已安裝正確的PHP版本和已複製相關檔案到模組目錄。暫時或永久停用SELinux。檢查並配置PHP.ini,確保已新增必要的擴充功能和進行正確設定。啟動或重新啟動PHP-FPM服務。檢查DNS設定是否有解析問題。

php7.0怎麼安裝部署 php7.0怎麼安裝部署 Nov 30, 2022 am 09:56 AM

php7.0安裝部署的方法:1、到PHP官網下載與本機系統對應的安裝版本;2、將下載的zip檔案解壓縮到指定目錄;3、開啟命令列窗口,在「E:\php7」目錄下運行“php -v”命令即可。

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? 在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? Apr 01, 2025 pm 03:06 PM

在Docker環境中使用PECL安裝擴展時報錯的原因及解決方法在使用Docker環境時,我們常常會遇到一些令人頭疼的問�...

php8和php7哪個好 php8和php7哪個好 Nov 16, 2023 pm 03:09 PM

PHP8相較於PHP7在效能、新特性和語法改進、型別系統、錯誤處理和擴充等方面都有一些優勢和改進。然而,選擇使用哪個版本要根據特定的需求和專案情況來決定。詳細介紹:1、效能提升,PHP8引進了Just-in-Time(JIT)編譯器,可以提高程式碼的執行速度;2、新特性和語法改進,PHP8支援命名參數和可選參數的聲明,使得函數呼叫更加靈活;引入了匿名類別、屬性的類型聲明等等。

See all articles