首頁 >後端開發 >php教程 >php中的擴充Xhprof如何分析專案的效能

php中的擴充Xhprof如何分析專案的效能

不言
不言原創
2018-08-29 10:52:261822瀏覽

這篇文章帶給大家的內容是關於php中的擴充Xhprof如何分析專案的效能,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

一、背景

專案即將上線,想透過一些工具來分析程式碼的穩定性和效率,想起在上個團隊時使用過的xhprof擴充;因為換了新電腦,所以需要重新編譯此擴展,現將安裝與實際排查過程完整記錄下來,方便自己回顧和幫助更多的讀者。

二、操作步驟

  1. 安裝擴充功能

  2. #設定擴充功能

##測試分析

三、安裝

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的指令來檢視設定檔存放位置,參考指令如下: <pre class="brush:php;toolbar:false">php --ini</pre>執行指令後,回傳結果如下

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如何分析專案的效能指令執行後,安裝擴充功能成功的回傳結果將會顯示xhprof,如下圖所示

五、測試

經過上面的操作筆者已經成功的安裝與配置,現在需要用PHP程式碼來進行驗證xhprof的分析效果

5.1 建立虛擬主機

首先建立一個虛擬主機,讓使用者可以透過瀏覽器存取所訪問,建立虛擬主機需要有一個根目錄,並編輯nginx設定文件,具體操作如下:

5.1. 1 建立專案目錄

建立專案根目錄,參考指令如下

mkdir -p /Users/song/mycode/work/test

建立成功之後,筆者需要將先前git拉下來的部分程式碼複製到專案根目錄當中,參考指令如下

cp -r xhprof/xhprof_html /Users/song/mycode/work/test/
cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/
5.1.2 編輯設定檔

新增設定檔,參考指令

/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 &#39;&#39;;
    }
}

//定义测试方法
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位址如下所示

http://test.localhost/xhprof/test.php
5.3 結果分析

運行後結果,如下圖php中的擴充Xhprof如何分析專案的效能

######在頁面中可以看到一個URL位址,複製並開啟此URL位址之後,便能看到此程式碼的分析結果,如下圖所示###

php中的擴充Xhprof如何分析專案的效能

在頁面中有一個列表,展示了每一個方法所消耗的時間,如果覺得列表的方式表示不夠清晰,點擊頁面中的View Full Callgraph 連結可以直接產生一個圖片,如下圖所示

php中的擴充Xhprof如何分析專案的效能

在圖中很清晰的可以看到執行時間都消耗在test方法上,因此筆者可以針對這個方法進行針對性的最佳化。

相關推薦:

php效能監控擴充xhprof

#利用xhprof(PHP)擴充功能進行WEB效能分析

以上是php中的擴充Xhprof如何分析專案的效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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