基于在生产环境中使用php性能测试工具xhprof的详解
前端之家收集整理的这篇文章主要介绍了
基于在生产环境中使用php性能测试工具xhprof的详解,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
xhprof 是facebook开源出来的一个PHP性能测试工具,也可以称之为profile工具,这个词不知道怎么翻译才比较达意。跟之前一直使用的xdebug相比,有很多类似之处。以前对xdebug有一些记录还可以供参考,但是它的缺点是对性能影响太大,即便是开启了profiler_enable_trigger参数,用在生产环境中也是惨不忍睹,cpu立刻就飙到high。
而xhprof就显得很轻量,是否记录profile可以由程序控制,因此,用在生产环境中也就成为一种可能。在它的文档上可以看到这样一种用法:
以万分之一的几率启用xhprof,平时悄悄的不打枪。
<div class="codetitle"><a style="CURSOR: pointer" data="83880" class="copybut" id="copybut83880" onclick="doCopy('code83880')"> 代码如下:
<div class="codebody" id="code83880">
if (mt_rand(1,10000) == 1) {
xhprof_enable(XHPROF_FLAGS_MEMORY);
$xhprof_on = true;
}
在程序结尾处
调用方法保存profile
<div class="codetitle">
<a style="CURSOR: pointer" data="75594" class="copybut" id="copybut75594" onclick="doCopy('code75594')"> 代码如下: <div class="codebody" id="code75594">
if ($xhprof_on) {
// stop profiler
$xhprof_data = xhprof_disable();// save $xhprof_data somewhere (say a central DB)
...
}
也可以用register_shutdown_function
方法指定在程序结束时保存xhprof信息,这样就免去了结尾处判断,给个改写的不完整例子:
<div class="codetitle">
<a style="CURSOR: pointer" data="53568" class="copybut" id="copybut53568" onclick="doCopy('code53568')"> 代码如下: <div class="codebody" id="code53568">
if (mt_rand(1,10000) == 1) {
xhprof_enable(XHPROF_FLAGS_MEMORY);
register_shutdown_function(create_funcion('',"$xhprof_data = xhprof_disable(); save $xhprof_data;"));
}
/**
* 由xhprof日志获得执行时间
*
* @param string $log xhprof日志的
文件路径
* @return int 执行时间
*/
function getSpentTime($log) {
$profile = unserialize(file_get_contents($log));
return $profile['main()']['wt'] / 1000;
}