目錄
開篇語
前建置docker 虛擬測試環境
1. 安裝xhprof
1.1 拉取項目
1.2 安裝專案
1.3 新增xhprof.so 拓展
2. 使用xhprof
#3. 圖表xhprof
3.1 這時候需要我們用到xhprof_lib 庫
3.2 配置一個單獨的服務來存取我們的分析結果
3.3 [View Full Callgraph]
4. 问题点
5. 结束
首頁 後端開發 PHP7 php7中使用xhprof解析

php7中使用xhprof解析

Jun 22, 2020 pm 05:39 PM
php

php7中使用xhprof解析

開篇語

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

推薦教學:《php教學

前建置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:

php7中使用xhprof解析

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

ct 表示 当前这个函数调用的次数,此案例都是1次
wt 表示 函数执行时间的耗时,单位为微秒复制代码
登入後複製

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

\xhprof_enable(
    XHPROF_FLAGS_MEMORY  
    +XHPROF_FLAGS_CPU
    +XHPROF_FLAGS_NO_BUILTINS
);复制代码
登入後複製

output:

php7中使用xhprof解析
  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配置的路徑下(需要自己手動建立下目錄)

php7中使用xhprof解析

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

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

php7中使用xhprof解析
##我們指向我們xhprof專案中的xhprof_html 目錄

php7中使用xhprof解析
我相信你到此明白了我們的run_id 和save_run中的project 的作用了

我們最上面部分是請求的介面指標總覽, 下面是具體的每個呼叫函數的執行情況。

欄位名稱含義#Calls#調用次數Incl. Wall Time呼叫的包含子函數所有花費時間,以微秒算Excl. Wall Time函數執行本身所花費的時間,不包含子樹執行時間,以微秒算#Incl. CPUExcl. CPUIncl.MemUseExcl.MemUseIncl.PeakMemUseExcl. PeakMemUse#

其余后面的 % 结尾均为对应的占比

3.3 [View Full Callgraph]

如果查看调用流程需要安装 graphviz 图形库. 这里我们推荐手动安装 graphviz 2.24.0 这个版本(亲自踩坑,2.40不支持)

 yum -y install libtool-ltdl-develcd /data/graphviz-2.24.0

./configure
make
make install复制代码
登入後複製
php7中使用xhprof解析

红色部分和黄色部分重点关心下,如果感觉只想分析某个流程, 可以点击到某个方法里面再点击【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 包。

5. 结束

希望大家工作开心

以上是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.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 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)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

為了在 cakephp4 中處理日期和時間,我們將使用可用的 FrozenTime 類別。

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

CakePHP 建立驗證器 CakePHP 建立驗證器 Sep 10, 2024 pm 05:26 PM

可以透過在控制器中新增以下兩行來建立驗證器。

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

See all articles
##呼叫的包含子函數所有花費的cpu時間
函數執行本身花費的cpu時間,不包含子樹執行時間,以微秒算
包含子函數執行使用的記憶體, 以位元組算
#函數執行本身記憶體,以位元組算
Incl.MemUse的峰值
Excl.MemUse的峰值