php性能测试xhprof,Xhprof php性能测试工具用法小结

  • Post author:
  • Post category:php


简介

改进php应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的。

Xhprof 是facebook推出的轻量级的php性能分析工具,下面简单介绍下Xhprof的安装及使用。

准备

安装

编译扩展

wget https://pecl.php.net/get/xhprof-0.9.4.tgz

tar xzf xhprof-0.9.4.tgz

cd xhprof-0.9.4

cd extension

/usr/local/bin/phpize

./configure –with-php-config=/usr/local/bin/php-config

make && make install

fd3933dc2285af77cb18e44400fc83f9.png

增加以下代码到php.ini文件中

[xhprof]

extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xhprof.so

xhprof.output_dir=”/www/xhprof”

重启 php

service php-fpm restart

90faf3546e8fc32f5513daa27b4766b8.png

xhprof安装成功

4. 拷贝文件 解压后的_xhprof-0.9.4_目录下有两个目录_xhprof_html_,_xhprof_lib_需要用到,拷贝到网站目录

cd xhprof-0.9.4

cp xhprof_* -R /www

使用

简单示例

_xhprof-0.9.4_目录下 有个examples目录,有个sample.php示例可以参考下,下面列出个简单用法流程

//开始分析

//XHPROF_FLAGS_CPU 使输出的性能数据中添加 CPU 数据。

//XHPROF_FLAGS_MEMORY 使输出的性能数据中添加内存数据。

//XHPROF_FLAGS_NO_BUILTINS (integer) 使得跳过所有内置(内部)函数。

//如果都监控多个可以用XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

//程序代码执行

……

include_once “xhprof_lib/utils/xhprof_lib.php”;

include_once “xhprof_lib/utils/xhprof_runs.php”;

$namespace = ‘demo’;

// 停止分析,获取数据,保存数据

$xhprof_data = xhprof_disable();

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, $namespace);

//查看运行结果的url

//run_id,source

//localhost 用自己的域名替换

echo “http://localhost/xhprof_html/index.php?run=”.$run_id.”&source=”.$namespace;

更好的方式

要分析现有的项目,不可能修改项目的源代码,所以我们可以利用php的auto_prepend_file,register_shutdown_function来注入代码,在这里我们用auto_prepend_file方式来示例. 增加以下代码到php.ini文件中

auto_prepend_file = “/data/www/header.php”

auto_append_file = “/data/www/footer.php”

header.php 文件内容

$xhprof_switch = false;

//为了减少性能开销,1000次只有一次进行性能采集

//判断cookie的值,可以方便灰度测试

if (isset($_COOKIE[‘xhprof_on’])) {

$xhprof_switch = true;

} else {

if (mt_rand(1, 1000) === 1) {

$xhprof_switch = true;

}

}

if ($xhprof_switch) {

if (extension_loaded(‘xhprof’)) {

include_once ‘/www/xhprof_lib/utils/xhprof_lib.php’;

include_once ‘/www/xhprof_lib/utils/xhprof_runs.php’;

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

}

}

footer.php 文件内容

if ($xhprof_switch && extension_loaded(‘xhprof’)) {

$namespace = ‘demo’;

$xhprof_data = xhprof_disable();

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, $namespace);

}

图形界面 源代码中的_xhprof_html_目录我们已经放到web目录了,直接进行访问http://xxx/xhprof_html/index.php 可以看到图形界面了,点击一个列表进去就可以看到如下统计表格了

093c97ed3c1d5bbdfb311fe0511e3b50.png

Wall Time:总执行时间

CUP Time:CPU占用时间

Memory Usage:内存占用率

Peak Memory Usage:内存峰值

Number of Calls:方法的调用次数

点击 Callgraph 可以看到酷酷的图形展示

扩展阅读