使用XHProf优化PHP程序
原文来自于:http://blog.sina.com.cn/s/blog_665fc8980100l8dq.html
XHProf 是 FaceBook 开发的一个函数级别的 PHP 分层分析器。
数据收集部分是一个基于 C 的 PHP 扩展,分析报告是一系列基于 PHP 的 HTML 导航页面。
XHProf 能统计每个函数的调用次数、内存使用、CPU占用等多项重要的数据。
并且 XHProf 还能比较两个统计样本,或从多个数据样本中汇总结果。
XHProf 是分析 PHP 程序执行效率的利器,能让我们得到更底层的的分析数据。
安装 XHProf
XHProf 目前的最新版本是 0.92,你可以从它的主页(http://pecl.php.net/package/xhprof)下载它的最新版本。
例如,我的 Web 目录是 /data/zivn.me,那么我可以通过下面的命令来安装 XHProf 。
查看源代码
打印?
1 wget http://pecl.php.net/get/xhprof-0.9.2.tgz
2 tar zxf xhprof-0.9.2.tgz
3 cd xhprof-0.9.2
4 cp -r xhprof_html xhprof_lib /data/zivn.me/
5 cd extension
6 phpize
7 ./configure
8 make
9 make install
当然,我们还需要修改 php.ini 来确保 XHProf 的正常运行。
我们需要先建立一个目录用来存储分析数据文件,例如 /data/zivn.me/xhprof/。
查看源代码
打印?
1 [xhprof]
2 extension=xhprof.so
3 xhprof.output_dir=/data/zivn.me/xhprof/
使用 XHProf
使用 XHProf 非常简单,我们只需要修改少许代码即可实现。
例如,我们需要分析代码执行时关于 CPU 和内存的数据。
查看源代码
打印?
01 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
02
03 // Test Code Start
04 …………
05 // Test Code End
06
07 $xhprofData = xhprof_disable();
08
09 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_lib.php";
10 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_runs.php";
11
12 $xhprofRuns = new XHProfRuns_Default();
13 $xhprofRuns->save_run($xhprofData, "xhprof");
这样,当我们运行程序之后,会在 /data/zivn.me/xhprof/ 之中生成分析数据文件。
文件名类似于 4b4c239a86593.xhprof ,我们可以通过改变 save_run 的参数,来改变文件后缀。
由于分析可能会影响响应速度,通常我们会加上一个随机数,随机取样,而不是分析所有用户请求的执行过程。
查看源代码
打印?
01 $randKey = mt_rand(1, 10000);
02
03 if ($randKey == 1)
04 {
05 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
06 }
07
08 // Test Code Start
09 …………
10 // Test Code End
11
12 if ($randKey == 1)
13 {
14 $xhprofData = xhprof_disable();
15
16 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_lib.php";
17 include_once "/data/zivn.me/xhprof_lib/utils/xhprof_runs.php";
18
19 $xhprofRuns = new XHProfRuns_Default();
20 $xhprofRuns->save_run($xhprofData, "xhprof");
21 }
查看 XHProf 分析数据
例如,我的域名是 zivn.me,现在我们就可以通过 web 来查看详细的分析数据了。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。