日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

php7中使用xhprof解析(Homestead)

發布時間:2023/12/15 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 php7中使用xhprof解析(Homestead) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開篇語

這是篇純文檔,如果以后有需要可以隨時查找, 使用 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:

我們發現調用了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
    不統計內置函數, 此次輸出可以看到已經忽略了我們拓展中的函數

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 目錄

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

字段名 含義
Calls 調用次數
Incl. Wall Time 調用的包括子函數所有花費時間,以微秒算
Excl. Wall Time 函數執行本身花費的時間,不包括子樹執行時間,以微秒算
Incl. CPU 調用的包括子函數所有花費的cpu時間
Excl. CPU 函數執行本身花費的cpu時間,不包括子樹執行時間,以微秒算
Incl.MemUse 包括子函數執行使用的內存, 以字節算
Excl.MemUse 函數執行本身內存,以字節算
Incl.PeakMemUse Incl.MemUse的峰值
Excl.PeakMemUse Excl.MemUse的峰值

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復制代碼

登錄后復制

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解析的詳細內容,更多請關注風君子博客其它相關文章!

總結

以上是生活随笔為你收集整理的php7中使用xhprof解析(Homestead)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。