搜尋
首頁後端開發PHP7php7中使用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. 结束

希望大家工作开心

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

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

陳述
本文轉載於:juejin.im。如有侵權,請聯絡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脫衣器

Video Face Swap

Video Face Swap

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

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1

記事本++7.3.1

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

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能