PHP扩展--XHProf优化PHP程序
简介
XHProf 是一个轻量级的分层性能测量分析器。 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。 它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。 函数性能报告可以由调用者和被调用者终止。 在数据搜集阶段 XHProf 通过调用图的循环来检测递归函数,通过赋予唯一的深度名称来避免递归调用的循环。
XHProf 包含了一个基于 HTML 的简单用户界面(由 PHP 写成)。 基于浏览器的用户界面使得浏览、分享性能数据结果更加简单方便。 同时也支持查看调用图。
XHProf 的报告对理解代码执行结构常常很有帮助。 比如此分层报告可用于确定在哪个调用链里调用了某个函数。
XHProf 对两次运行进行比较(又名 “diff” 报告),或者多次运行数据的合计。 对比、合并报告,很像针对单次运行的“平式视图”性能报告,就像“分层式视图”的性能报告。
安装/配置
编译安装
wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar -zxvf xhprof-0.9.4.tgz
cd xhprof-0.9.4/
cd extension/
/usr/local/php-5.3.3/bin/phpize
./configure --with-php-config=/usr/local/php-5.3.3/bin/php-config
make
make install
修改php.ini文件
[xhprof]
extension=xhprof.so
xhprof.output_dir=/var/log/xhprof
以上完成后重启apache,可以看到xhprof扩展
最后写个测试检验一下
//test.php
<?php
xhprof_enable();
strlen('hello world');
$xhprof_data = xhprof_disable();
var_dump($xhprof_data);
?>
返回结果(为了减少篇幅长度,这里做了格式化)
array(3) {
["main()==>strlen"]=>array(2) {
["ct"]=> int(1)
["wt"]=> int(4)
}
["main()==>xhprof_disable"]=>array(2) {
["ct"]=> int(1)
["wt"]=> int(1)
}
["main()"]=>array(2) {
["ct"]=> int(1)
["wt"]=> int(20)
}
}
预定义常量
XHPROF_FLAGS_NO_BUILTINS (integer) | 使得跳过所有内置(内部)函数。
XHPROF_FLAGS_CPU (integer) | 使输出的性能数据中添加 CPU 数据。
XHPROF_FLAGS_MEMORY (integer) | 使输出的性能数据中添加内存数据。
可视化
xhprof 为我们提供了可视化的工具,将tar包里面的xhprof_lib、xhprof_html复制到站点目录下即可
cp -r xhprof_html/ xhprof_lib/ /usr/local/httpd-2.4.7/htdocs/xhprof
写一个测试脚本。把结果输出到可视化界面上
<?php
xhprof_enable();
for ($i = 0; $i <= 1000; $i++) {
$a = $i * $i;
}
$xhprof_data = xhprof_disable();
$XHPROF_ROOT = "/www/project/merchant.wbaipay.com/html/xhprof";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing");
echo "http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n";
?>
打开链接,可以查看效果
在需要调试的地方加如header.php
php_admin_value auto_prepend_file /var/www/xhprof/external/header.php
header.php
<?php
if (extension_loaded('xhprof') )
{
xhprof_enable();
register_shutdown_function(function(){
$xhprof_data = xhprof_disable();
$XHPROF_ROOT = __DIR__.'/..';
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing");
echo "http://192.168.41.121:93/?run={$run_id}&source=xhprof_testing\n";
});
}else{
error_log('xhgui - either extension xhprof or uprofiler must be loaded');
}
安装Graphviz
wget "http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.26.3.tar.gz"
tar zxf graphviz-2.26.3.tar.gz
cd graphviz-2.26.3
./configure --prefix=/usr
make && make install
PHP扩展--XHProf优化PHP程序的更多相关文章
- 转:使用XHProf优化PHP程序
原文来自于:http://blog.sina.com.cn/s/blog_665fc8980100l8dq.html XHProf 是 FaceBook 开发的一个函数级别的 PHP 分层分析器. 数 ...
- 怎么优化JAVA程序的执行效率和性能?
现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...
- 10个技巧优化PHP程序Laravel 5框架
10个技巧优化PHP程序Laravel 5框架 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践www.itxdl.c ...
- org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法分析器在此文档中遇到多个 "64,000" 实体扩展; 这是应用程序施加的限制
使用SAX解析XML文件.XML文件有1.5G,程序抛出了这个问题: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法 ...
- 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)
一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...
- ZanUI-WeApp -- 一个颜值高、好用、易扩展的微信小程序 UI 库
ZanUI-WeApp -- 一个颜值高.好用.易扩展的微信小程序 UI 库:https://cnodejs.org/topic/589d625a5c8036f7019e7a4a 微信小程序之官方UI ...
- Linux关联文件扩展名和打开程序
手动为Linux关联文件扩展名与打开程序. 当Linux不认识某种扩展名的时候,需要为此扩展名创建一个MIME类型.Linux是依据MIME类型而不是扩展名来决定打开程序的. 再将此种MIME类型与某 ...
- Asp.net 面向接口可扩展框架之应用程序上下文作用域组件
在团队中推广面向接口开发两年左右,成果总体来说我还是挺满意的,使用面向接口开发的模块使用Unity容器配置的功能非常稳定,便于共享迁移(另一个项目使用只需要复制配置和调用接口即可),如果再配合上DI那 ...
- 优化PHP程序的方法(温故知新)
1. If a method c++an be static, declare it static. Speed improvement is by a factor of 4. 如果一个方法可静态化 ...
随机推荐
- MacOS下安装Requests库及使用
大概框架 Request库的安装 爬取网页最好用的第三方库 直接安装即可(用于OS X) pip3 install requests request库的常用方法: request库一共有七个常用方法. ...
- 福大软工1816 ·软工之404NoteFound团队选题报告
目录 NABCD分析引用 N(Need,需求): A(Approach,做法): B(Benefit,好处): C(Competitors,竞争): D(Delivery,交付): 初期 中期 个人贡 ...
- 软件图书,偏.net方向
深入理解计算机系统(原书第2版) 作者:Randal E.Bryant:1981年在麻省理工学院获计算机科学博士学位,现任美国卡内基·梅隆大学计算机学院院长 内容: 深入浅出地介绍了处理器.编译器.操 ...
- 1."问吧APP"客户需求调查分析
产品名称:问吧 产品功能:实时提问回答和搜索 开发原因:任何人都会遇到问题,网上虽然有很多回答,但是互联网的信息错综复杂,开发这个APP就是为了让网络求助更加的合理有效,清除网络上的垃圾信息. 为知大 ...
- php获取指定div内容
<?php $p="http://127.0.0.1:8080/website/index.html"; $ch = curl_init(); curl_setopt($ch ...
- C++11 锁 lock
转自:https://www.cnblogs.com/diegodu/p/7099300.html 互斥(Mutex: Mutual Exclusion) 下面的代码中两个线程连续的往int_set中 ...
- javac和java的使用
java -Xmx128m -Dfile.encoding=gbk -cp ./;bin/;./*;lib/* com.qianlima.crawlOthers.Icp REM REM block e ...
- windows查看端口占用指令
1.Windows平台 在windows命令行窗口下执行: 1.查看所有的端口占用情况 C:\>netstat -ano 协议 本地地址 外部地址 ...
- Java Servlet简介
一.了解Servlet的概念 Servlet定义 Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容.Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能.Se ...
- Kafka发布订阅消息
Maven <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-cli ...