《PHP实例:php轻量级的性能分析工具xhprof的安装使用》要点:
本文介绍了PHP实例:php轻量级的性能分析工具xhprof的安装使用,希望对您有用。如果有疑问,可以联系我们。
PHP进修一、前言
PHP学习 有用的东西还是记录下来吧,也便利以后的查询;这次记录一下xhprof的安装使用;
PHP学习 xhprof是facebook开源出来的一个php轻量级的性能阐发工具,跟Xdebug类似,但性能开销更低,
PHP学习 还可以用在生产环境中,也可以由法式开 关来控制是否进行profile.
PHP进修二、安装
PHP学习
wget http://pecl.php.net/get/xhprof-0.9.3.tgz
tar zxf xhprof-0.9.3.tgz
cd xhprof-0.9.3/extension
/usr/bin/phpize
(php版本安装后生成的phpize文件,可根据phpinfo查看,所以php版本分歧,生成的phpize也分歧,此步骤主要生成configure文件)
./configure Cwith-php-config=/usr/bin/php-config
(php-config的路径,也是php安装后生成的文件)
make
sudo make install
PHP学习 (会自动将生成的扩展文件拷贝到扩展目录中/usr/lib64/php/modules)
PHP学习 当然具体的php文件的目录,每小我不尽相同,可根据phpinfo查询
PHP学习三、php.ini设置装备摆设
PHP学习依据phpinfo找到 extension_dir的目录
(/etc/php.d/xhprof.ini)
PHP进修添加一下内容:
PHP学习
extension=xhprof.so
xhprof.output_dir=/tmp/xhprof //xhprof的阐发日志
PHP学习四、重启服务
PHP学习
sudo /etc/init.d/http restart
PHP学习 查看phpinfo是否安装胜利
PHP学习五、使用办法
PHP学习
开头:
xhprof_enable(); //开启监测
//xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不记录内置的函数
//xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 同时分析CPU和Mem的开销
//要测试的代码
...
...
...
结尾:
$xhprof_data = xhprof_disable(); //停止监测,返回运行数据
$xhprof_root = '/(xhprof的虚拟主机目录)/';
//引入当初安装到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");
echo '<a href="http://(xhprof的虚拟主机域名)/xhprof_html/index.php?run='.$run_id.'&source=xhprof" target="_blank">xhprof统计</a>';
PHP学习 上边的代码使用了,给xhprof设置虚拟主机的办法.
PHP学习 把源码包中的 xhprof_html 和 xhprof_lib 文件夹拷贝到本身建立的虚拟目录中
PHP学习 cp -r xhprof_html xhprof_lib /xxx/xhprof/ (此处目的是建立数据分析目录,可将此目录配置成虚拟主机拜访)
PHP进修 运行后,统计点击返回的 xhprof统计 链接,即可.
PHP进修六、注意问题以及名词解释
PHP学习 在显示的统计页面中,点[View Full Callgraph]图形化显示(最大的性能问题会用赤色标出,其次是黄色);
PHP学习 点击后,可能提示差错消息,执行以下命令即可
PHP进修
yum install -y graphviz
yum install graphviz-gd
PHP进修 名词解释
PHP进修
PHP学习
Function Name 函数名
Calls 调用次数
Calls% 调用百分比
Incl. Wall Time (microsec) 调用的包含子函数所有花费时间 以微秒算(一百万分之一秒)
IWall% 调用的包含子函数所有花费时间的百分比
Excl. Wall Time (microsec) 函数执行本身花费的时间,不包含子树执行时间,以微秒算(一百万分之一秒)
EWall% 函数执行本身花费的时间的百分比,不包含子树执行时间
Incl. CPU(microsecs) 调用的包含子函数所有花费的cpu时间.减Incl. Wall Time即为等待cpu的时间
减Excl. Wall Time即为等待cpu的时间
ICpu% Incl. CPU(microsecs)的百分比
Excl. CPU(microsec) 函数执行本身花费的cpu时间,不包含子树执行时间,以微秒算(一百万分之一秒).
ECPU% Excl. CPU(microsec)的百分比
Incl.MemUse(bytes) 包含子函数执行使用的内存.
IMemUse% Incl.MemUse(bytes)的百分比
Excl.MemUse(bytes) 函数执行本身内存,以字节算
EMemUse% Excl.MemUse(bytes)的百分比
Incl.PeakMemUse(bytes) Incl.MemUse的峰值
IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比
Excl.PeakMemUse(bytes) Excl.MemUse的峰值
EPeakMemUse% EMemUse% 峰值百分比
PHP学习xhprof的安装与简易用法
PHP学习xhprof是Facebook开源的轻量级PHP性能分析工具,Linux环境下可以通过pecl直接安装,好比在Ubuntu下仅需3行指令
PHP学习
pecl install xhprof-beta
echo "extension=xhprof.so" > /etc/php5/fpm/conf.d/xhprof.ini
service php5-fpm restart
PHP学习之后可以通过phpinfo()反省扩展是否已经加载.
PHP学习具体如何使用呢,xhprof项目中已经提供了示例以及简易的UI,下载xhprof项目到web服务器,假设可以通过http://localhost/xhprof/拜访,那么拜访http://localhost/xhprof/examples/sample.php可以看到一些输出,并且提示通过拜访http://<xhprof-ui-address>/index.php?run=XXX&source=xhprof_foo查看结果.接下来拜访http://localhost/xhprof/xhprof_html/就可以看到已经保存的结果,列出了所有函数的调用以及所消耗的时间.
PHP学习分析一下示例代码sample.php,关键部门只有2行:
PHP学习
//开启xhprof并开始记录
xhprof_enable();
//运行一些函数
foo();
//停止记录并取到结果
$xhprof_data = xhprof_disable();
PHP学习$xhprof_data中记录了程序单步运行过程中所有的函数调用时间及CPU内存消耗等,具体记录哪些指标可以通过xhprof_enable的入口参数控制,之后的处理已经与xhprof扩展无关,大致是编写了一个存储类XHProfRuns_Default,将$xhprof_data序列化并保留到某个目录,可以通过XHProfRuns_Default(__DIR__)将结果输出到当前目录,如果不指定则会读取php.ini配置文件中的xhprof.output_dir,仍然没有指定则会输出到/tmp.
PHP学习xhprof_html/index.php将记录的结果整理并可视化,默认的UI里列出了:
•funciton name : 函数名
•calls: 调用次数
•Incl. Wall Time (microsec): 函数运行时间(包含子函数)
•IWall%:函数运行时间(包含子函数)占比
•Excl. Wall Time(microsec):函数运行时间(不包含子函数)
•EWall%:函数运行时间(不包含子函数)
PHP学习每一项应该不难理解,以项目自带的sample.php为例,示例中编写了一个main()函数,main()函数中调用foo()、bar()等一些子函数进行了一点字符处理.整个程序运行过程中,main()函数只运行了一次,并且由于main()函数中包含了所有的逻辑,所以main()函数的IWall%占比为100%,但是由于main()函数的功能都是由子函数实现的,因此main()函数的EWall%只有0.3%,而foo()函数完成了主要的工作,EWall%有98.1%.因此在分析更大型的程序时,往往需要根据这几项指标分别排序,从不同的角度审视性能消耗.
PHP学习在xhprof_html/index.php中还可以看到[View Full Callgraph]链接,点击后可以绘制出一张可视化的性能阐发图,如果点击后报错的话,可能是缺少依赖graphviz,ubuntu可以通过apt安装
apt-get install graphviz
PHP进修更好的注入方式
PHP学习了解了上面这些,其实就已经可以将xhprof整合到任何我们已有的项目中去了.目前大部分MVC框架都有唯一的入口文件,只必要在入口文件的开始处注入xhprof的逻辑
PHP学习
//开启xhprof
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
//在程序结束后收集数据
register_shutdown_function(function() {
$xhprof_data = xhprof_disable();
//让数据收集程序在后台运行
if (function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
//保留xhprof数据
...
});
PHP学习但是这样免不了要修改项目的源代码,其实php本身就提供了更好的注入方式,比如将上述逻辑保留为/opt/inject.php,然后修改php fpm配置文件
PHP学习
vi /etc/php5/fpm/php.ini
PHP学习改动auto_prepend_file配置
PHP学习
auto_prepend_file = /opt/inject.php
PHP学习这样所有的php-fpm哀求的php文件前都会自动注入/opt/inject.php文件
PHP学习如果使用Nginx的话,还可以通过Nginx的配置文件设置,这样侵入性更小,而且可以实现基于站点的注入.
PHP进修
fastcgi_param PHP_VALUE "auto_prepend_file=/opt/inject.php";
维易PHP培训学院每天发布《PHP实例:php轻量级的性能分析工具xhprof的安装使用》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/8800.html