改进php应用程序的性能是一项很是耗时耗力的工做,可是究竟程序中是哪些函数消耗掉了大部分执行时间,这一般都不是很是明显的。php
Xhprof 是facebook推出的轻量级的php性能分析工具,下面简单介绍下Xhprof的安装及使用。html
yum install graphviz
.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
[xhprof] extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xhprof.so xhprof.output_dir="/www/xhprof"
service php-fpm restart
xhprof安装成功
4. 拷贝文件 解压后的_xhprof-0.9.4_目录下有两个目录_xhprof_html_,_xhprof_lib_须要用到,拷贝到网站目录web
cd xhprof-0.9.4 cp xhprof_* -R /www
//开始分析 //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;
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 文件内容cookie
$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 文件内容app
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 能够看到图形界面了,点击一个列表进去就能够看到以下统计表格了 函数
Wall Time:总执行时间php-fpm
CUP Time:CPU占用时间工具
Memory Usage:内存占用率性能
Peak Memory Usage:内存峰值测试
Number of Calls:方法的调用次数
点击 Callgraph 能够看到酷酷的图形展现