[PHP]函數級分層性能分析工具-Xhprof的安裝與使用

PHP性能分析工具-Xhprof的安裝與使用php

XHProf 是一個輕量級的分層性能測量分析器。html

XHProf 包含了一個基於 HTML 的簡單用戶界面(由 PHP 寫成)。 基於瀏覽器的用戶界面使得瀏覽、分享性能數據結果更加簡單方便。 同時也支持查看調用圖。nginx

XHProf 的報告對理解代碼執行結構經常頗有幫助。 好比此分層報告可用於肯定在哪一個調用鏈裏調用了某個函數。git

本機環境

PHP 版本:github

# 系統默認的php位置:
$ which php
/usr/local/bin/php
# 本機使用的php版本爲php5.4(不使用系統自動的)
$ /usr/local/webserver/php54/bin/php -v
PHP 5.4.44 (cli) (built: May 20 2016 10:19:39)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

使用 phpize 動態安裝擴展

本機的Nginx和PHP等服務軟件都安裝在"/usr/local/webserver」目錄下:web

# 系統默認phpize
$ which phpize
/usr/local/bin/phpize

# 本機安裝的phpize版本(不使用系統自動的):
$ cd /usr/local/webserver/php54/bin/
$ ls
pear peardev pecl phar phar.phar php php-cgi php-config phpize
$ /usr/local/webserver/php54/bin/phpize
$ /usr/local/webserver/php54/bin/phpize -v
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525

下載與安裝 xhprof:瀏覽器

$ cd /usr/local/webserver
$ wget http://pecl.php.net/get/xhprof-0.9.4.tgz
$ tar zxf xhprof-0.9.4.tgz
$ cd xhprof-0.9.4
//配置xhprof, 注意指定php-config地址
$ ./configure --with-php-config=/usr/local/webserver/php54/bin/php-config
$ sudo make
$ sudo make test
$ sudo make install

注意,--with-php-config 中php-config的位置,不一樣的環境中可能會有不一樣的路徑。php7

配置 php.ini

本機的 PHP 配置文件 php.ini文件在: /usr/local/webserver/php54/php.ini :app

$ ls -l
total 136
drwxr-xr-x  11 root  admin    374  5 20 10:26 bin
drwxr-xr-x   5 root  admin    170  5 20 12:53 etc
drwxr-xr-x   3 root  admin    102  5 20 10:22 include
drwxr-xr-x   3 root  admin    102  5 20 10:22 lib
drwxr-xr-x   4 root  admin    136  5 20 10:22 php
-rw-r--r--@  1 root  admin  65690  9  9 13:54 php.ini
drwxr-xr-x   3 root  admin    102  5 20 10:22 sbin
drwxr-xr-x   4 root  admin    136  5 20 10:22 var

在 php.ini 中末尾增長以下內容:ssh

[xhprof]
extension=xhprof.so;
xhprof.output_dir=/tmp/xhprof

注意,xhprof.output_dir指定的目錄 /tmp/xhprof/ 必定要有讀寫權限

而後重啓PHP-fpm/Nginx:

$ sudo /usr/local/webserver/php54/sbin/php-fpm 
$ sudo /usr/local/webserver/nginx/nginx -s reload

注意,不一樣的環境於配置下,php與nginx的安裝路徑可能會有不一樣。

查看是否安裝成功:

$ /usr/local/webserver/php54/bin/php -i |grep xhprof
xhprof
xhprof => 0.9.2

使用XHProf的時候,在點擊[View Full Callgraph]查看結果分析圖時,會報錯.

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found `

緣由是缺乏graphviz繪圖軟件, 可使用brew來安裝graphviz。

$ brew search graphviz
$ brew install graphviz

Ubuntu環境可使用:

sudo apt-get install graphviz

$ whereis dot dot: /usr/bin/dot /usr/share/man/man1/dot.1.gz

Xhprof的使用

嵌入PHP代碼

<?php
// cpu:XHPROF_FLAGS_CPU 內存:XHPROF_FLAGS_MEMORY
// 若是兩個一塊兒:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

//要測試的php代碼
// … …

$data = xhprof_disable();   //返回運行數據

// xhprof_lib在下載的包裏存在這個目錄,記得將目錄包含到運行的php代碼中
require_once "xhprof_lib/utils/xhprof_lib.php";
require_once "xhprof_lib/utils/xhprof_runs.php";

$objXhprofRun = new XHProfRuns_Default();

// 第一個參數是xhprof_disable()函數返回的運行信息
// 第二個參數是自定義的命名空間字符串(任意字符串),
// 返回運行ID,用這個ID查看相關的運行結果
$run_id = $objXhprofRun->save_run($data, "xhprof");
var_dump($run_id);

查看生成的報告:

生成的報告,列表頁,連接以下: http://localhost/wangyt/xhprof_html/index.php?run=$run_id&source=xhprof

頁面中包含以下內容:

Existing runs:
    57d277ccf2464.xhprof.xhprof 2016-09-09 16:50:20
    57d277c9e32a3.xhprof.xhprof 2016-09-09 16:50:17
    57d27755dc7f5.xhprof.xhprof 2016-09-09 16:48:21
    ...

點擊頁面中的連接,會進入相應的報告詳情頁中. 好比點擊第一個"57d277ccf2464", 連接以下: http://localhost/wangyt/xhprof_html/index.php?run=57d277ccf2464&source=xhprof

頁面中會展現一個表格, 表格中會有如下參數指標:

Function Name 函數名稱
Calls 調用次數
Calls% 調用次數的百分比
Incl. Wall Time(microsec) : 包含時間, 包括子函數全部執行時間。
IWall% 包含時間所佔總時間的百分比
Excl. Wall Time(microsec) : 獨佔時間, 函數自己消耗的時間,不包括子函數執行時間。
EWall% 獨佔時間所佔總時間的百分比

點擊頁面中的 [View Full Callgraph],能夠查看圖像化的內容展現,連接以下: http://localhost/wangyt/xhprof_html/callgraph.php?run=57d277ccf2464

在 Homestead(PHP7)環境中安裝 XHProf

  • 登陸到 vagrant 虛擬機
$ cd ~/homestead
    $ vagrant ssh
  • 安裝 XHProf 擴展
cd ~/Code
    git clone https://github.com/longxinH/xhprof.git ./xhprof
    cd xhprof/extension/
    /usr/bin/phpize
    ./configure --with-php-config=/usr/bin/php-config
    make && sudo make install
  • 建立一個目錄,存放分析結果
mkdir -p /tmp/xhprof/
  • 在文件 /etc/php/7.1/fpm/php.ini 增長 xhprof 擴展配置:
$ sudo vi /etc/php/7.1/fpm/php.ini

    > [xhprof]
    > extension = xhprof.so
    > xhprof.output_dir = /tmp/xhprof 

    (xhprof.output_dir 內容就是咱們剛剛建立的目錄)
  • 安裝graphviz繪圖軟件 (可選)
$ sudo apt-get install graphviz
    $ whereis dot
    dot: /usr/bin/dot /usr/share/man/man1/dot.1.gz
  • 配置訪問界面

在本機中增長host記錄:

$ sudo vi /etc/hosts
 192.168.10.10 xhprof.app

配置 Homestead.yaml 新增一個網站:

...
    sites:
    ...
    - map: xhprof.app
      to: /home/vagrant/Code/xhprof/xhprof_html  
    ...

重啓 vagrant :

$ vagrant provision

訪問: http://xhprof.app 便可。

參考連接:

(1) http://php.net/manual/zh/book.xhprof.php
(2) http://pecl.php.net/package/xhprof
(3) http://www.xhprof.com/
(4) http://my.oschina.net/mickelfeng/blog/496902
(5) http://avnpc.com/pages/profiler-php-performance-online-by-xhprof
(6) https://www.goivvy.com/blog/xhprof-php-7

更新記錄

(1) 20160909 整理本文內容 (2) 20160912 新增安裝 graphviz 內容 (3) 20170912 新增Homestead(php7)下安裝

[END]

相關文章
相關標籤/搜索