资讯专栏INFORMATION COLUMN

PHP 性能追踪及分析工具(XHPROF)

raoyi / 1117人阅读

摘要:什么是开源的轻量级性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,时间和内存使用情况。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。对于本地开发环境来说,进行性能分析是够用了。

什么是 XHPROF?

XHPROF:Facebook 开源的轻量级PHP性能分析工具。

它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。

XHProf分析报告有助于理解被执行的代码的结构,它有一个简单的HTML的用户界面( PHP写成的)。

基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。

也能绘制调用关系图。

XHPROF 与 Xdebug 区别

Xdebug 是一个开放源代码的PHP程序调试器(即一个Debug工具)。

对于本地开发环境来说,进行性能分析 Xdebug 是够用了。

但如果是线上环境的话,Xdebug 消耗较大,配置也不够灵活。

如何安装 XHPROF ?
//源码安装
cd /usr/local/src
wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar zxvf xhprof-0.9.4.tgz
cd xhprof-0.9.4/extension/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

//在 php.ini 末尾新增
[xhprof]

extension = xhprof.so

xhprof.output_dir = 自定义文件夹(/tmp/xhprof_log)
// /tmp/xhprof_log 必须存在且有写入权限

//重启环境

//代码中查看 phpinfo 是否包含 xhprof。

//一切顺利的话,那么 xhprof 安装成功。
如何配置 XHPROF?
//比如项目地址:local.test_xhprof.com
//在项目入口文件中新增一下代码(CI框架为例)
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS +
              XHPROF_FLAGS_CPU +
              XHPROF_FLAGS_MEMORY);

register_shutdown_function(function(){
    $data = xhprof_disable();   //返回运行数据
    //xhprof_lib 在下载的包里存在这个目录,记得将目录包含到运行的php代码中
    include "/home/www/mi/xhprof/xhprof_lib/utils/xhprof_lib.php";
    include "/home/www/mi/xhprof/xhprof_lib/utils/xhprof_runs.php";
    $objXhprofRun = new XHProfRuns_Default();
    $objXhprofRun->save_run($data, "test"); //test 表示文件后缀
});

//一切顺利的话,那么代码安装成功。

//访问:local.test_xhprof.com,应该在 /tmp/xhprof_log 存在日志文件。
如何 UI 展示?
//将 xhprof_html、xhprof_lib 拷贝到虚拟目录中
cd /usr/local/src
cp xhprof-0.9.4/xhprof_html /home/www/mi/xhprof/xhprof_html
cp xhprof-0.9.4/xhprof_lib /home/www/mi/xhprof/xhprof_lib

配置虚拟主机(local.xhprof.com)

local.xhprof.com 指向 /home/www/mi/xhprof/ 即可。

访问:local.xhprof.com/xhprof_html 会显示日志文件。

如下图:

点击日志文件显示下图。

点击 [View Full Callgraph] 会显示调用关系图。

在生成图的时候需要服务器装一个插件:graphviz。

cd /usr/local/src
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
tar zxvf graphviz-2.24.0.tar.gz
cd graphviz-2.24.0
./configure
make
make install

//一切顺利的话,那么 graphviz 安装成功。

如果点击 [View Full Callgraph] 依旧无法打开。

报错:failed to execute cmd " dot -Tpng"

表示:php.ini 中一些执行函数禁用了。

在 php.ini 中 去掉 disable_functions 中的如下函数
system
shell_exec
proc_open
proc_get_status

PHP 重启一下。

一切顺利的话,应该不会报错了,就可以看到高大上的效果图啦。

点击局部,可以看到大图。

以上,大家可以看到 函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。

如何更好的UI展示?

可能大家有一些疑问:

是否能有更好的UI展示?

当服务器上有多个站点的时候,是否配置一次即可?

接下来给大家介绍:xhprof gui

xhprof gui : 一个xhprof的一个ui展现。

使 xhprof 界面更漂亮,功能更强大。

友好的界面

数据库存储(mysql)

支持按请求百分比执行 xhprof 优化。

降低服务器负载。

如何配置 xhprof gui

源码地址:https://github.com/preinheime...

下载后存放到:xhprof_gui 文件中。

配置虚拟主机(local.xhprofgui.com)

local.xhprofgui.com 指向 /home/www/mi/xhprof_gui/ 即可。

第一步,需要将 xhprof_gui/xhprof_lib/config.sample.php 重命名 为 config.php。

第二步,根据 config.php 中数据库变量(dbuser、dbpass、dbname),配置一个数据库。

第三步,将 config.php 中 doprofile 设置为 true。

第三步,创建一张表。

//源代码:xhprof_lib/utils/xhprof_runs.php
CREATE TABLE `details` (
  `id` char(17) NOT NULL,
  `url` varchar(255) default NULL,
  `c_url` varchar(255) default NULL,
  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `server name` varchar(64) default NULL,
  `perfdata` MEDIUMBLOB,
  `type` tinyint(4) default NULL,
  `cookie` BLOB,
  `post` BLOB,
  `get` BLOB,
  `pmu` int(11) unsigned default NULL,
  `wt` int(11) unsigned default NULL,
  `cpu` int(11) unsigned default NULL,
  `server_id` char(3) NOT NULL default "t11",
  `aggregateCalls_include` varchar(255) DEFAULT NULL,
  PRIMARY KEY  (`id`),
  KEY `url` (`url`),
  KEY `c_url` (`c_url`),
  KEY `cpu` (`cpu`),
  KEY `wt` (`wt`),
  KEY `pmu` (`pmu`),
  KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

如果是 Nginx 服务器 新增配置:

fastcgi_param PHP_VALUE "auto_prepend_file=/home/www/mi/xhprof_gui/external/header.php";

如果是 Apache 服务器:

php_admin_value auto_prepend_file "/home/www/mi/xhprof_gui/external/header.php"

配置到这里,可以运行下。

简单说明下:

如果你配置在公共的配置文件中,那么表示站点上所有的域名访问都会进行日志记录。

如果你配置在单个域名的配置文件中,表示只有访问当前域名的时候回进入日志记录。

例如单个域名为:local.xh.test.com

如果报错,可以调试下 header.php。

以上配置,存储使用的是Mysql。

存储也可以使用MongoDB,大家可以研究下 ~

如果看到效果?

访问 local.xh.test.com,记录日志。

访问 local.xhprofgui.com,查看效果。

效果图,如下:

效果图上传失败。

效果图地址:https://ntaste.github.io/imag...

我本地为 nginx 环境,已经配置成功。

如果大家需要下载我配置的好的 xhprof_gui 类库。

可以关注微信公众号,回复 “xhprof” 即可。

那么问题来了,分析出效率低的地方如何进行调整?

有经验的同学,可以留言哈 ~

Thanks ~


推荐阅读

系统的讲解 - SSO 单点登录

系统的讲解 - PHP WEB 安全防御

系统的讲解 - PHP 缓存技术

系统的讲解 - PHP 接口签名验证

系统的讲解 - PHP 浮点数高精度运算

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22210.html

相关文章

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

    摘要:为提高的性能,你可以运行以下指令以添加索引安装的扩展在文件最后增加查看是否安装成功重启运行的安装脚本。 PHP性能追踪及分析工具xhprof的安装与使用 对于本地开发环境来说,进行性能分析xdebug是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能追踪及分析。 我们今天就简单介绍一下xhprof的简单安装与使用 xhp...

    microelec 评论0 收藏0
  • 使用XHProf分析PHP性能瓶颈(二)

    摘要:上一篇文章里,我们介绍了如何基于扩展来分析性能,并记录到日志里,最后使用扩展自带的在里展示出来。本次测试中,实际使用了扩展切换为扩展后里看不到数据,原因未知。虽然来自但已经很久不更新,官方源已经显示此包已废弃,不再维护。 上一篇文章里,我们介绍了如何基于xhprof扩展来分析PHP性能,并记录到日志里,最后使用xhprof扩展自带的UI在web里展示出来。本篇文章将讲述2个知识点: ...

    Worktile 评论0 收藏0
  • Docker的LNMP一键安装开发环境 + PHP非侵入式监控平台xhgui(优化系统性能、定位Bu

    摘要:的一键安装开发环境非侵入式监控平台优化系统性能定位的神器之前在用做本地开发环境,因为没有这些对程序性能追踪及分析的工具,所以索性基于的编排了一套自己使用。 DNMP PLUS dnmp = Docker + Nginx + MySQL + PHP + Redis + MongDB plus = xhgui + xhprof + tideways dnmp-plus = PHPer 的一...

    AlanKeene 评论0 收藏0
  • PHP性能被动分析工具之xhgui加tideways的安装实践

    摘要:性能被动分析工具之加的安装实践前言最近一直想做个接口性能分析,但是手打实在能把人给累死。怎么办呢想到之前有写过一篇我所知道的相关调优汇总,里面有一个的调优方式。但是使用它酷炫的需要付费,扩展则不需要。 PHP性能被动分析工具之xhgui加tideways的安装实践 By:0x584A Date:2016-11-23 17:55:42 前言 最近一直想做个接口性能分析,但是手打log实在...

    Chiclaim 评论0 收藏0
  • xhprof的使用

    摘要:它报告函数级别的请求次数和各种指标,包括阻塞时间,时间和内存使用情况。它独有的数据计算的报告后处理阶段。在数据收集时,通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。 简介 XHProf是一个分层PHP性能分析工具。XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数...

    darryrzhong 评论0 收藏0

发表评论

0条评论

raoyi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<