xhprof
目的
在win7环境搭建基于apache2和php5的性能监测平台。
环境
- apache2.2
- php-5.3.29-nts-Win32-VC9-x86
- windows7 x64
线上调试可选组合
- xhprof + uprofiler 【facebook开源组合】
- xhprof + xhprof.io 【xhprof.io界面升级】【
本文方案
】 - xhprof + xhgui 【xhgui华丽界面】
- tideways + xhgui 【需要php5.5,mongodb】
- xhprof + xhgui
- uprofiler + xhgui
- tideways + tideways UI 【支持php5-7界面异常华丽,商业软件一个月39-159欧元】
php扩展
- phacility/xhprof 【上次更新2015-02,不支持php7】
- FriendsOfPHP/uprofiler 【基于facebook/xhprof】
- tideways/php-profiler-extension 【支持php5,php7,更新活跃】
ui显示
- gajus/xhprof.io 【上次更新2016-09,支持域名检索,使用mysql】
- perftools/xhgui 【目前更新活跃,不支持按域名检索,使用mongodb,php>=5.5】
- tideways UI 【商业软件需可试用一个月】
下载对应版本
http://windows.php.net/downloads/pecl/releases/xhprof/0.10.6/
10/23/2013 12:29 PM 81960 php_xhprof-0.10.6-5.3-nts-vc9-x86.zip
10/23/2013 12:29 PM 82425 php_xhprof-0.10.6-5.3-ts-vc9-x86.zip
10/23/2013 12:29 PM 82506 php_xhprof-0.10.6-5.4-nts-vc9-x86.zip
10/23/2013 12:29 PM 83488 php_xhprof-0.10.6-5.4-ts-vc9-x86.zip
10/23/2013 12:29 PM 85630 php_xhprof-0.10.6-5.5-nts-vc11-x64.zip
10/23/2013 12:29 PM 85440 php_xhprof-0.10.6-5.5-nts-vc11-x86.zip
10/23/2013 12:29 PM 85741 php_xhprof-0.10.6-5.5-ts-vc11-x64.zip
10/23/2013 12:29 PM 85774 php_xhprof-0.10.6-5.5-ts-vc11-x86.zip
配置xhprof
将下载好的dll放入phpdir/ext
中
(若为linux,需要编译原文件)
在php.ini
末尾加入以下配置信息,注意output_dir
文件夹必须创建
[xhprof]
extension=php_xhprof.dll
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
xhprof.output_dir="C:/xiji/xhprof_log"
重启apache查看phpinfo()
xhprof | enabled |
---|---|
xhprof version | 0.10.3 |
CPU num | 4 |
process bound to | CPU 3 |
CPU logical id | Clock Rate (MHz) |
CPU 0 | 2270 |
CPU 1 | 2583 |
CPU 2 | 2591 |
CPU 3 | 2584 |
可以查看到xhprof 已经安装到了php
安装可视化工具
https://github.com/gajus/xhprof.io(一个年久失修的可视化程序)
可以用,但是有bug
下载安装
- 从github下载master压缩包
- 解压到你想放置的目录
- 执行
\xhprof.io-master\setup\database.sql
安装数据库 - 配置数据库
\xhprof.io-master\xhprof\includes\config.inc.php
return array(
'url_base' => 'http://localhost/xhprof.io-master/',
'url_static' => null, // When undefined, it defaults to $config['url_base'] . 'public/'. This should be absolute URL.
'pdo' => new PDO('mysql:dbname=test;host=localhost;charset=utf8', 'root', 'root'),
'enable' =>function(){
return isset($_GET['debug']);
}
);
- 注入文件,
enable
是配置文件中新增的一个判断函数,可以自定义记录规则。(参考了网上其他博客)
if (extension_loaded('xhprof')) {
$xhprof_config = require $_SERVER['DOCUMENT_ROOT'].'/xhprof.io-master/xhprof/includes/config.inc.php';
if (!empty($xhprof_config['enable']) && $xhprof_config['enable']()) {
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
register_shutdown_function(function() use ($xhprof_config){
$xhprof_data = xhprof_disable();
if (function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
require_once $_SERVER['DOCUMENT_ROOT'].'/xhprof.io-master/xhprof/classes/data.php';
$xhprof_data_obj = new \ay\xhprof\Data($xhprof_config['pdo']);
$xhprof_data_obj->save($xhprof_data);
});
}
}
插曲
我发现打开这个分析呈现工具的时候有的时候很卡,所以就给这个程序分析了一下,发现他有个判断版本的程序段
在\xhprof.io-master\xhprof\includes\bootstrap.inc.php
的81行,进行了curl操作,这个工具的作者在github都说了这个东西不再维护了,所以就没有判断版本的必要,直接注释了就行了
注释掉判断版本相关的代码之后,访问起来快多了
修改版
进行了以下修改
- 进行了粗略汉化,有些单词不知道确切意思就没改
- 某些情况下内存使用会出现负数,数据库为无符号型,经过研究界面总是显示绝对值,于是修改为在插入时取绝对值
- 整理了网上资料修改了注入文件
- 下载修改版xhprof.io.rar
1 条评论
当时研究了好久,最后也没用上,并没有什么卵用