Windows版本Apache+php的Xhprof应用
[知识]
{Apache}
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
{PHP}
PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言。
{Xhprof}
XhProf是一个分层PHP性能分析工具,可它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。
[情况]
- 以上两个应用Apache+php组合在Windows上是比较常见,一般用来组织开发环境,或者调试环境,或者测试环境,当然也有不少是用于生产环境 的,对于我而言,我是用他们来进行开发的,由于比较习惯了在Windows下面开发,尽管自己也搭建了基于Linux虚拟机的开发平台,用着也还可以,但 总是无法舍离Windows下的环境。
- 我一直是eclipse+xdebug的方式开发调试,没有遇到太多的问题,开发也比较的顺利,不过昨天在测试一个页面的时候,发现php出现了一种类似 锁死的现象,即执行该页面后,php-cgi一直挂在进程里,既没有cpu消耗,也没有内存级数增长,仅仅是停留着不动,网页也不生成,百思不得其解,而 且仔细检查和调试代码也没有发现明显的瓶颈,另外我是在自己的6核电脑上测试的,文件系统也是正常的,锁死就变成了很奇怪的事情。我自己使用的是 Apache_1.3.37-Win32+php-5.2.6-Win32+Xdebug-2.1.2版本调试的,发现在调试过程中,整个eclipse 都处于无响应的状态,似乎这种锁死有传导性,故调试一直无法进行,由于写了比较多的代码,有点累,没有去想是什么具体原因,暂且休息一会。
- 在搜索的时候无意中发现了Xhprof工具,看了一些博主的文章,发现这个工具可以分析程序性能,值可能有一些粗略,是基于函数的,但却是很直观和清晰的,非常感兴趣,所以挂起了刚才的开发,研究下这个东西。
[过程]
- 由于参考了好几个博文,而且都是基于Linux版本的介绍,没有找到一个基于Windows的介绍,总不能一下子就切换到Linux下面去开发吧?所以又 搜索,发现一个外文站点提供了一个编译好的Xhprof,不过版本是基于php-5.3.3-Win32版本的,代码是基于Xhprof的0.9.2版本 的,呵呵,看来有人和我想到一块儿了,不过搜索的结果非常少,中文的几乎几乎没有,外文的也就只有凤毛麟角的几个结果而已。
- 从该外文站点下载了xhprof for windows版本,又从facebook原始发布站下载了相关的xhprof代码和相关的生成页面文档,由于xhprof是基于php5.3.3编译的,还需要准备php5.3.3,直接去php.net去拉一个vc6线程安全版本下来。
- Apache有现成的,所以直接修改了原来的http.conf,把php5.3.3以cgi方式引入apache中,调试了一下,顺利的集成,phpinfo一切正常,xdebug也是一切正常的,现在开始加入xhprof的准备工作都做好了。
- 直接把xhprof for windows版本安置好,然后在要测试的页面里面加入调试页面和代码,就可以啦。
[步骤]
- 先要下载xhprof for windows版本,这个没得说,地址:http://www.benjamin-carl.de/?download=XHProf-0.10.0-PHP-5.3.3-VC6-x86-TS,下载的zip文件解压缩后是一个dll文件,直接放到php的ext目录里面就可以了,如图1所示:

图1
- 然后要把xhprof的两个包含了调试输出页面的子目录安置好,这里我选择了直接安置在自己网站发布位置的根目录里,也就是apache默认的 htdocs的目录里面,我这里的htdocs是转移到另外一个开发U盘上的,方便在不同的地方编制代码,如图2所示,这里图示了一共3个文件夹,分别是xhprof_html、xhprof_lib、xprof_log,其中xhprof_html和xhprof_lib是从下载的xhprof源代码文件包里得到的,包所在站点:http://pecl.php.net/package/xhprof,xhprof下载地址:http://pecl.php.net/get/xhprof-0.9.2.tgz,然后自行在htdocs里创建xprof_log文件夹,这个文件夹是用来存放页面分析数据的。

图2
- 由于我的Apache+php已经完全调试好,所以要处理的只有php.ini文件,开启办法很简单,在该文件的末尾加上如下代码即可:
[xhprof]
extension=php_xhprof.dll
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for
storing
; XHProf runs.
xhprof.output_dir="M:/htdocs/xhprof_log"“提示:xhprof.output_dir=这个使用于设置性能分析数据存放位置的,我这里应为htdocs在M盘,故设置为M:/htdocs/xhprof_log,也就是上述的目录位置”
- 添加成功后,可以重启Apache看看phpinfo()信息中是否包含了xhprof的段,有的话,那就安装成功了,提示:以cgi方式运行的php修改了php.ini以后,可以直接运行phpinfo()查看结果,而无须重新启动Apache。结果的话如图3所示:

图3
- 好了,至此为止,xhprof已经正确的安装好了。
[结语]
现在已经搭配好了Apache_1.3.37-Win32、php-5.3.3-Win32-VC6-x86、xhprof-0.10.0,现在总结一下,linux下的不少知识可以在windows下做的时候提供不少帮助和参考。
{xhprof_enable()}
在要统计的代码部分之前加,可以自动的收集诸如函数名、调用次数、调用频率,而且可以非常详尽的显示调用层次,非常的方便。
XHPROF_FLAGS_CPU参数
XHPROF_FLAGS_MEMORY参数
XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY参数
{xhprof_disable()}
统计的代码部分之后加,返回值是一个数组,包括了运行的相关信息数据
Windows版本Apache+php的Xhprof应用的更多相关文章
- Windows版本Apache+php的Xhprof应用__[2]
[计划] “Windows版本Apache+php的Xhprof应用__[1]”中已经解决了下载,配置的问题,所以这里的工作是接着进行的,我们以调试一个 php代码的文件来看看是怎么用xhprof的. ...
- 下载windows版本apache网页服务器
1.进入apache服务器官网http://httpd.apache.org/,这里我们以下载稳定版的httpd 2.4.25为例,点击download. 2.点击链接Files for Micros ...
- PHP环境配置-从Apache官网下载windows版apache服务器
由于个人有强迫倾向,下载软件都喜欢从官网下载,摸索了好久终于摸清楚怎么从Apache官网下载windows安装版的Apache服务器了,现在分享给大家. 进入apache服务器官网http://htt ...
- WAMP(Windows、Apache、MySQL、php)安装配置过程常见问题
WAMP(Windows.Apache.MySQL.php)安装配置过程 可以参考该网友的总结(总结的不错,鼓掌!!): http://www.cnblogs.com/pharen/archive/2 ...
- Windows下Apache+mod_python+Django配置
Windows下Apache+mod_python+Django配置 Apache 首先要安装Apache,我安装的版本是2.2.*: Python python肯定是要安装的,我安装的版本是2.5的 ...
- Windows 下 Apache HTTP Server 安装、配置以及与 Tomcat 的整合(附图)
如果您能点开这篇文章,说明您已对熟悉Apache HTTP Server(下文用Apache简称)配置的重要性已很清楚了,本文不在赘述,直接介入正题,请往下阅读: 为便于阅读,列出文章目录: 一.Ap ...
- Windows + Flask + Apache + wsgi踏坑总结
据前人踏坑经历,拷贝如下: 1. Apache,mod_wsgi和Python都必须用相同版本的C/C++编译器生成,要么都是32位的,要么都是64位的,不能混用. 2. Apache和mod_wsg ...
- windows版本免安装redis, nginx, zookeeper
redis官网:https://redis.io/ windows版本免安装redis下载链接:https://github.com/MSOpenTech/redis/releases nginx官网 ...
- windows安装apache
由于个人有强迫倾向,下载软件都喜欢从官网下载,摸索了好久终于摸清楚怎么从Apache官网下载windows安装版的Apache服务器了,现在分享给大家. 工具/原料 apache 方法/步骤 ...
随机推荐
- 存储过程,游标,异常捕捉 try catch 实例代码
1.存储过程代码. (数据库是 AdventureWorks) 存储过程用来将错误信息插入到指定的表中. 在别的地方可以调用存储过程插入错误信息(下面部分代码 生成一个表,如果表已经存在就会插入错误 ...
- hdu 5243 Homework
Homework Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- element-ui dialog组件添加可拖拽位置 可拖拽宽高
edge浏览器下作的gifhttp://www.lanourteam.com/%E6... 有几个点需要注意一下 每个弹窗都要有唯一dom可操作 指令可以做到 拖拽时要添加可拖拽区块 header 由 ...
- stl_hash_map.h
stl_hash_map.h // Filename: stl_hash_map.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...
- 3.20 内存及效率的一些总结 3.21 设置竖屏 3.22 CCLOG与CCLog区别
3.20 内存及效率的一些总结 3.21 设置竖屏 1.android AndroidManifest.xml文件中, screenOrientation="landscape" ...
- BZOJ5302: [Haoi2018]奇怪的背包
BZOJ5302: [Haoi2018]奇怪的背包 https://lydsy.com/JudgeOnline/problem.php?id=5302 分析: 方程\(\sum\limits_{i=1 ...
- Rabbitmq用户权限配置
由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq(该 ...
- 宝塔中的 base_opendir chattr
宝塔中的 base_opendir chattr base_opendir 目的是限制一些函数将手乱伸. 而宝塔中的自动配置的是 .user.ini,这个是文件是 +i ............ 这个 ...
- HIVE-分区表详解以及实例
HIVE中的分区表是什么,我们先看操作,然后再来体会. 创建一个分区表,分区的单位时dt和国家名 hive> create table logs(ts bigint,line string) & ...
- bzoj 3992 [SDOI2015]序列统计——NTT(循环卷积&&快速幂)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 有转移次数.模M余数.方案数三个值,一看就是系数的地方放一个值.指数的地方放一个值.做 ...