facebook工具xhprof的安装与使用-分析php执行性能
下载源码包的网址
http://pecl.php.net/package/xhprof
上面说了,每个版本适用的php版本。
规划(预先搞清楚思路)
一、这是一个php扩展的形式。我们安装gd2,curl都是php的扩展形式。只不过有的时候编译的时候就安装进去了。
像操作mysql数据库,也是一个mysql.so这样的扩展,安装了扩展,就能调用mysql_query()这些函数。
要操作oracle数据库,也有对应的oracle扩展加到php引擎中去。
现在要把xhprof扩展加到php中去。
很久没使用phpize安装扩展了。我自己忘得差不多了。于是重新去自己的博客找到以前写的文章复习一下。
http://www.cnblogs.com/wangtao_20/archive/2011/03/16/1986508.html
ps:我也在思考,这个东西怎么这么容易忘记。我只知道他的作用。但是完全不记得他的操作步骤。要注意的细节。
看我得想办法以通俗的方式来理解记住它。
二、php.ini需要进行配置的项
[xhprof]
extension=xhprof.so;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
;xhprof.output_dir=<directory_for_storing_xhprof_runs>
;储存 XHProf 运行数据的默认目录
xhprof.output_dir=/tmp/xhprof
三、有了这个扩展后,就能在自己的php代码中调用这个扩展内置的函数来做性能监控了,像下面这样子
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
................这里是要被监控的代码块
$data = xhprof_disable();
include_once "xhprof_lib/utils/xhprof_lib.php";
include_once "xhprof_lib/utils/xhprof_runs.php";
$objXhprofRun = new XHProfRuns_Default();//数据会保存在php.ini中xhprof.output_dir设置的目录去中
$run_id = $objXhprofRun->save_run($data, "test");
=====================================================
几个扩展函数如下
步骤实施
1、先找到我服务器上php的安装目录,phpize一般都是在安装目录中,如下:
/usr/local/php/bin/phpize
2、找出php-config在哪个目录(下面会用到),我的服务器在:
/usr/local/php/bin/php-config
目的:在下面进行编译的时候,会用到这个文件
./configure --with-php-config=/usr/local/php/bin/php-config
3、找到我服务器上php扩展在哪个目录,不确定的话,我觉得去php.ini中也能看到,如下
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" 这个路径感觉有点长。不用去改了php.ini中的设置,目前我觉得没必要(商业与时间成本,这部分还不是制约因素)。按原来的继续放扩展。
现在知道扩展目录为:/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
也就是说,我要把xhprof的源码包解压到这个目录下去(解压后会生成一个新的文件夹)。
那我就要去这个目录下运行phpize(这样方便在这个目录下面生成configure文件),
phpize的特点:在a目录下运行phpize,就会在a目录下生成configure。
得到上面路径,shell命令实践
cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
解压下载到的xhprof压缩包(我不是通过wget下载的,我是把这个压缩直接通过ftp上传到no-debug-non-zts-20060613目录中去)。
tar zxf xhprof-0.9.3.tgz #解压后,里面有个extension文件夹,进入里面去(目的是进入里面去运行phpize),解压后的目录结构如下
cd xhprof-0.9.3/extension/ #切换到这个扩展的源码目录去
在这个目录下面运行phpize,就会在extension目录下生成一个configure文件(这是phpize的机制)
/usr/local/php/bin/phpize
去看一下扩展目录,会发现在extension目录生成了一个configure文件。运行它
======================================
./configure --with-php-config=/usr/local/php/bin/php-config #用到了前面找到的php-config文件。
make && make install
make test
======================================
运行成功后,会提示生成的xhprof.so文件在哪个位置,提示信息:
Libraries have been installed in:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xhprof-0.9.3/extension/modules
这个目录下已经存在一个文件:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xhprof.so
刚才生成了xhprof.so这个模块文件,现在要在php.ini中加载刚才生成xhprof.so模块才能生效:
[xhprof]
extension=xhprof.so;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
;xhprof.output_dir=<directory_for_storing_xhprof_runs>
xhprof.output_dir=/tmp/xhprof
平滑重新加载php.ini文件:/usr/local/php/sbin/php-fpm reload
提示:
Reload service php-fpm done
说明成功。
现在去phpinfo中看xhprof扩展是否加载成功了
安装作图工具(选填,可以后续再安装)
yum install -y graphviz
================================================
工具的使用实践
================================================
index.php中的代码:
<?php
error_reporting(-1);
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
$begin_time = microtime_float();
///////////////统计执行速度代码
$end_time = microtime_float();
$exec_time = $end_time-$begin_time;
//@save_stat($exec_time);
for($i=0;$i<10;$i++){
for($j=0;$j<10;$j++){
}
}
$data = xhprof_disable();
include_once "xhprof_lib/utils/xhprof_lib.php";//从源码包中拷贝xhprof_lib这个文件夹过来直接可以调用
include_once "xhprof_lib/utils/xhprof_runs.php";
$objXhprofRun = new XHProfRuns_Default();//数据会保存在php.ini中xhprof.output_dir设置的目录去中
$run_id = $objXhprofRun->save_run($data, "test");
//第二个参数是定义文件名称。名称如果为"xhprof",则在xhprof.output_dir设置的目录生成的文件:522ab85f40229.xhprof.xhprof。
//格式为:"id标识.组名称.xhprof",id标识就是$run_id得到的结果。
//id标识是每次运行的时候就生成一个新的标识,也就是生成一个新的文件,记录每次运行的数据
var_dump($run_id);
echo "http://www.xxxx.com/xhprof_html/index.php?run={$run_id}&source=test\n";//source的值必须是save_run中指定的名称。这个其实就是根据编号和名称才能定位到对应的文件"522ab85f40229.xhprof.xhprof"
//将这个地址输出来,是为了直接可以去查看分析结果。
function save_stat($time)
{
static $call_count=1;
$call_limit = 10;
if(!$time) return ;
$date = date("Y-m-d");//暂时按照天来生成文件。方便查阅
$exec_stat_file = './exec_stat'.DIRECTORY_SEPARATOR."exec_stat_file-".$date.".txt";
$fp = fopen($exec_stat_file,'ab');
if(flock($fp,LOCK_EX))
{
$s = 'access:'.date("Y-m-d H:i:s").',execute time:'.$time.'s,request_url:http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."||".PHP_EOL;
fwrite($fp,$s);
flock($fp,LOCK_UN);
}else{
usleep(1000);
if($call_count<$call_limit)
{
$call_count++;
save_stat($time);
}
}
@fcolse($fp);
//var_dump($fp);
}
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
?>
加粗的黑体,就是分析用到的代码。
其中用到了源码包中的xhprof_lib中的代码,代码中"XHProfRuns_Default"这个类就是里面的。
生成了分析结果后,现在可以去使用源码包中提供的web版的工具查看了。
xhprof_html这个文件夹随便放到哪里,只要放到能够通过web访问的目录下即可,不过这个里面会用到xhprof_lib中的类,所以还是一起复制过去,跟源码包中保持一样的结构才好。xhprof_html与xhprof_lib要保持平行
我这里,这个工具的访问方式是:http://www.xxxx.com/xhprof_html/index.php?run=xxx&source=xxx\n
source的值必须是save_run中指定的名称。这个其实就是根据编号和名称才能定位到对应的文件"522ab85f40229.xhprof.xhprof"
访问看到的结果如下
图中,红色的表示最耗费性能的,黄色的其次。
只了解这么多了。具体的分析结果怎么看,在文件夹xhprof_html中有个docs目录,里面是说明文档。说了一些专用术语的定义
注意点:在php.ini中xhprof.output_dir设置的目录,要自己手动去创建。这个工具不会自动去创建。没有该文件夹。就不会生成。另外,在linux下还要保证权限设置好,我设置的属主是www就可以用了。
单位:1s(秒)=1000ms(毫秒)
官方解释
- Inclusive Time (or Subtree Time): Includes time spent in the function as well as in descendant functions called from a given function.
- Exclusive Time/Self Time: Measures time spent in the function itself. Does not include time in descendant functions.
- Wall Time: a.k.a. Elapsed time or wall clock time.
- CPU Time: CPU time in user space + CPU time in kernel space
Exclusive Time表示函数本身的执行时间。这个时间并不包含里面调用其他函数的耗时(其实就是去掉里面其他函数的耗时,因为函数里面调用到的函数也会进行单独统计)。
而Inclusive Time则是包括了里面调用的子函数时间(descendant functions)
所以,我的理解是Exclusive Time<=Inclusive Time
facebook工具xhprof的安装与使用-分析php执行性能的更多相关文章
- facebook工具xhprof的安装与使用-分析php执行性能(转载)
下载源码包的网址 http://pecl.php.net/package/xhprof
- php性能分析工具 - xhprof的安装使用
一.前言 有用的东西还是记录下来吧,也方便以后的查询:这次记录一下xhprof的安装使用: xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低, ...
- PHP性能追踪及分析工具xhprof的安装与使用
对于本地开发环境来说,进行性能分析xdebug是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能追踪及分析. 我们今天就简单介绍一下x ...
- PHP性能分析工具xhprof的安装使用与注意事项
前言 xhprof由facebook开源出来的一个PHP性能监控工具,占用资源很少,甚至能够在生产环境中进行部署. 它可以结合graphviz使用,能够以图片的形式很直观的展示代码执行耗时. 下面主要 ...
- 在数据库中分析sql执行性能
SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON GO /*--SQL脚本开始*/ SELECT * FROM ...
- PHP性能优化工具–xhprof安装
PHP性能优化工具–xhprof安装,这里我先贴出大致的步骤: 1.获取xhprof 2.编译前预处理 3.编译安装 4.配置php.ini 5.查看运行结果 那么下面我们开始安装xhprof工具吧: ...
- 可视化日志分析工具Gltail的安装与使用
可视化日志分析工具Gltail的安装与使用 GlTail.rb 是一款带有浓郁的 Geek 风格的可视化日志分析工具,它采用 Ruby 技术构建,并利用 OpenGL 图形技术进行渲染,呈现 ...
- PHP - xhprof+Graphviz 安装配置
简介:XHProf是Facebook放出的轻量级调试工具.和Xdebug相比,XHProf更加易用和可控,尤其是生成流程图和调试数据对比的功能很好很强大. 参考:http://us2.php.net/ ...
- php调试利器Xhprof的安装与使用
一.安装xhprof wget http://pecl.php.net/get/xhprof-0.9.4.tgz tar -zxvf xhprof-0.9.4.tgz cd xhprof-0.9.4/ ...
随机推荐
- Android Studio多Module开发需要注意的问题
多module开发,其中的一个为入口module,其他module为独立的“应用”(library) 1.在原有的项目导入另外个项目的module为主项目的次module,即在A项目中添加一个启动B项 ...
- 传智播客c/c++公开课学习笔记--邮箱账户的破解与邮箱安全防控
一.SMTP协议 SMTP(SimpleMail Transfer Protocol)即简单邮件传输协议. SMTP协议属于TCP/IP协议簇,通过SMTP协议所指定的server,就能够把E-mai ...
- 删除vector指定位置的元素
原文链接: http://www.cnblogs.com/yeahgis/archive/2012/05/29/2523476.html #include <vector>#include ...
- C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账
要求1:完成以下两种账户类型的编码.银行的客户分为两大类:储蓄账户(SavingAccount)和信用账户(CreditAccount),两种的账户类型的区别在于:储蓄账户不允许透支,而信用账户可以透 ...
- 请通过vim练习:vim vimtutor
vim vimtutor ================================================================================ W e l ...
- GitHub 上值得推荐的开源电子书
GitHub 上值得推荐的开源电子书 开源不仅局限于软件领域,开源同样意味着自由选择的权利和对知识开放的追求. 可以参照这篇文章,已附上所有超链接编程类开放书籍荟萃-Linux Story 语言无关类 ...
- Java批量插入更新操作
以前总是说批量插入和更新的效率比非批量的要高,但是一直没有使用过批量处理数据的功能,现在由于项目中需要处理的数据量比较大,所以使用了批量处理的功能,java代码如下: 1.java实现批量插入数据: ...
- 《Java Concurrency》读书笔记,Java并发编程实践基础
1. 基本概念 程序,是一组有序的静态指令,是一种静态的概念.程序的封闭性是指程序一旦运行,其结果就只取决于程序本身:程序的再现性是指当机器在同一数据集上重复执行同一程序时,机器内部的动作系列完全相同 ...
- ubuntu for win10 里运行net core
花了点时间在ubuntu for win10里运行net core 按官网上ubuntun10.14装的net core指令 ...... ...... sudo apt-get install do ...
- Xcode6中添加pch文件
转自:http://www.cnblogs.com/YouXianMing/p/3989155.html 1. 新建工程: 2. 创建pch文件: 3. 在setting里面进行设置: 4. 一切尽在 ...