一、xhprof扩展安装步骤

xhprof是PHP的一个扩展,最好也直接安装上graphviz图形绘制工具(用于xhprof分析结果以直观的图形方式显示),废话不多说,直奔正题。

1、安装

  • PHP5版本的安装
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/
phpize
./configure
make
make install
  • PHP7版本的安装

下载源码包xhprofhttps://github.com/rustjason/xhprof/tree/php7

unzip xhprof-php7.zip
cd xhprof-php7/extension/
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

2、修改php.ini配置文件

在php.ini配置文件中追加下面配置,并创建目录/home/wwwroot/default/xhprof_data

[xhprof]
extension = xhprof.so
// xhprof分析结果文件存放根目录
xhprof.output_dir = /home/wwwroot/default/xhprof_data

3、添加一个环境变量XHPROF_ROOT_PATH

为了后期每个项目都能使用xhprof来进行性能分析,建议给PHP加一个环境变量,这样之后,在任何项目代码里都可以很方便的调用xhprof来分析性能瓶颈,请执行如下操作:

vim /usr/local/php/etc/php-fpm.conf
env[XHPROF_ROOT_PATH]=/usr/local/php/include/xhprof/

4、将xhprof核心源代码复制到上述XHPROF_ROOT_PATH环境变量所指定的目录下

cp -r xhprof_lib /usr/local/php/include/xhprof/xhprof_lib

5、将下面两个目录复制到xhprof_data的同级目录下(最好都放到web根目录下)

查看分析结果文件有用

//执行
cp -r xhprof_html /home/wwwroot/default/xhprof_html
cp -r xhprof_lib /home/wwwroot/default/xhprof_lib //改变xhprof_data目录拥有者,为了浏览器访问时能在xhprof_data目录下写入文件
chown -R www:www xhprof_data

6、访问xhprof根目录

配置demo.com域名根目录为/home/wwwroot/default/,则可访问如下链接查看xhprof结果分析根目录http://demo.com/xhprof_data/,如下图所示:

7、形象化的查看分析结果

安装图形绘制工具,后面的分析结果可以通过该工具以图形显示,更直观

执行安装命令:yum install graphviz

二、xhprof的使用

1、xhprof性能分析小demo

下面写的三种方式实现阶乘的代码

<?php

xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

$n = 5;

echo jc($n);
echo '<br>'; echo jc($n);
echo '<br>'; echo jc($n);
echo '<br>'; function jc($n){
if($n == 1){
return 1;
} return $n * jc($n-1);
} function jc2($n){
$m = 1;
for($i=1; $i<=$n; $i++){
$m = $m * $i;
} return $m;
} function jc3($n){
$arr = [];
$arr[1] = 1; for($i = 2; $i<=$n; $i++){
$arr[$i] = $i * $arr[$i-1];
} return $arr[$n];
} $data = xhprof_disable();
//$_SERVER['XHPROF_ROOT_PATH'] 这就是第三步添加的那个环境变量
include_once $_SERVER['XHPROF_ROOT_PATH'] . "xhprof_lib/utils/xhprof_lib.php";
include_once $_SERVER['XHPROF_ROOT_PATH'] . "xhprof_lib/utils/xhprof_runs.php";
$x = new XHProfRuns_Default(); //拼接文件名
$xhprofFilename = date('Ymd_His'); //print_r($data);die;//此处的打印数据看起来非常不直观,所以需要安装yum install graphviz 图形化界面显示,更直观
$x->save_run($data, $xhprofFilename);

上述小demo执行后,会在xhprof_data目录下生成一个分析结果保存文件,网页端访问结果文件,如下图:

当我在点[View Full Callgraph]查看图形分析界面时,问题出现了,如下图:



好在网上查到原因是,php配置文件中有个disable_functions禁用函数列表,把里面的proc_open去掉即可。

图形分析结果显示如下

2、实际项目中该如何引入xhprof

请参考如下截图所示引入思路(在项目控制器基类构造方法和析构方法里做手脚),思路技巧仅供学习参考,如下图:



下面是我在项目(以Yii2为框架)下引入xhprof代码一览

<?php
namespace backend\component; use Yii;
use common\component\baseController; class backendBaseController extends baseController
{
public $layout = "/content";
public $enableCsrfValidation = false; public static $profiling = 0; public function init(){
parent::init(); self::$profiling = 1;// !(mt_rand() % 9);
if (self::$profiling) {
xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
}
} public function __destruct()
{
if(self::$profiling){
$data = xhprof_disable();
//$_SERVER['XHPROF_ROOT_PATH'] 该环境变量由第3步得来
include_once $_SERVER['XHPROF_ROOT_PATH'] . "/xhprof_lib/utils/xhprof_lib.php";
include_once $_SERVER['XHPROF_ROOT_PATH'] . "/xhprof_lib/utils/xhprof_runs.php";
$x = new XHProfRuns_Default(); //当前路由
$routeName = Yii::$app->requestedRoute;
//路由为空,则说明是首页
if (empty($routeName)){
$routeName = Yii::$app->defaultRoute;
} //拼接xhprof分析结果保存文件名
$xhprofFilename = str_replace('/', '_', $routeName).'_'.date('Ymd_His');
$x->save_run($data, $xhprofFilename);
}
}
}

总结

xhprof是一个分析PHP代码性能瓶颈,提高PHP代码效率的有利工具,通过xhprof,可以看到代码慢在哪里,哪里还有优化的空间等等。

最后分享一个关于xhprof不错的资料 ipc2015-xhprof.pdf 下载链接:https://pan.baidu.com/s/1EPuKunXlI1gvmtLICHyCxw 密码:11p0

参考资料

1.使用XHProf查找PHP性能瓶颈

2.PHP性能分析工具 xhprof

3.xhprof安装了graphviz还报错failed to execute cmd " dot -Tpng"

xhprof扩展安装与使用的更多相关文章

  1. PHP5.4安装xhprof扩展[不要去pecl下载]

    HP5.3或之前版本可以去pecl(http://pecl.php.net)下载xhprof扩展安装. 但pecl上的版本不支持PHP5.4 可以到github上的xhprof库中下载:https:/ ...

  2. php性能分析工具 - xhprof的安装使用

    一.前言 有用的东西还是记录下来吧,也方便以后的查询:这次记录一下xhprof的安装使用: xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低, ...

  3. facebook工具xhprof的安装与使用-分析php执行性能

    下载源码包的网址 http://pecl.php.net/package/xhprof

  4. facebook工具xhprof的安装与使用-分析php执行性能(转载)

    下载源码包的网址 http://pecl.php.net/package/xhprof

  5. PHP性能追踪及分析工具xhprof的安装与使用

    对于本地开发环境来说,进行性能分析xdebug是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能追踪及分析. 我们今天就简单介绍一下x ...

  6. 【推荐】CentOS安装PHP-5.6.4+扩展安装+安全配置+性能配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 前段时间PHP官方发布了一个重要的安全升级公告,修复了两个unserialize函数的严重漏洞,目前受影响的版本有: ...

  7. eclipse插件本地扩展安装

    (1)在Eclipse 安装路径下新建links 路径. (2) 在links 文件夹内,建立X X X .link 文件,该文件的文件名可随意,但后缀必须是link ,通常推荐该文件的文件名与插件名 ...

  8. linux下Redis与phpredis扩展安装

    ++++++++++++++++++++++++++++++++++++++++++++++linux下Redis与phpredis扩展安装++++++++++++++++++++++++++++++ ...

  9. Centos linux php扩展安装步骤

    使用phpinfo()函数输出PHP信息,然后找到Configuration File (php.ini) apachectl 其设计意图是帮助管理员控制Apache httpd后台守护进程的功能. ...

随机推荐

  1. dubbo服务使用spring-data-mongodb进行时间查询的bug记录

    一.项目情况:spring-boot+mongodb+dubbo. 二.问题:调用dubbo服务并使用spring-data-mongodb的gte,lte时间段比较查询, @Reference(re ...

  2. Java EE之Hibernate的HibernateSessionFactory

    昨天,一下午都被一个bug缠身,最后逐层排查,发现是MyEclipse 2014自动生成的HibernateSessionFactory有问题.后观察网友提供的自动生成的HibernateSessio ...

  3. 寻路优化(一)——二维地图上A*启发函数的设计探索

    工作中需要优化A*算法,研究了一天,最后取得了不错的效果.看网上的朋友还没有相关的研究,特此记录一下.有错误欢迎大家批评指正.如需转载请注明出处,http://www.cnblogs.com/Leon ...

  4. AD域相关的属性和C#操作AD域

     “常规”标签  姓 Sn 名 Givename 英文缩写 Initials 显示名称 displayName 描述 Description 办公室 physicalDeliveryOfficeNam ...

  5. phantomjs 截取twitter的网页(动态生成的页面)

    // This example shows how to render pages that perform AJAX calls// upon page load.//// Instead of w ...

  6. 查看tomcat运行状态

    实时查看tomcat并发连接数: netstat -na | grep ESTAB | grep 8080 | wc -l 实时查看apache并发连接数: netstat -na | grep ES ...

  7. 003_Linux的Cgroup<实例详解>

    为什么要有cgroup Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源.也就是能完成一组容器的概念,在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等.于是就 ...

  8. 利用jstack命令定位占用cpu高的java线程及具体错误代码信息

    1.先用top查询某进程的线程CPU占用情况,定位到cpu占用高的进程pid 2.根据pid定位具体的线程top -p PID -H ,找出占用cpu最大的pid,此处占用cpu比较平均,我们随便选择 ...

  9. 中文多分类 BERT

    直接把自己的工作文档导入的,由于是在外企工作,所以都是英文写的 Steps: git clone https://github.com/google-research/bert prepare dat ...

  10. MyCP(课下作业,必做)

    作业要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为 ...