首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用xhprof + graphviz 性能追踪php站点

使用xhprof + graphviz 性能追踪php站点

作者头像
老七Linux
发布2018-05-31 12:01:25
1.5K0
发布2018-05-31 12:01:25
举报

我们晓得一旦站点慢下来之后有很多原因,假如站点是LNMP结构,我们可以从Nginx,PHP,Mysql三部分去找原因(当然排除负载和外部设备问题),在PHP这块我们有个慢日志,终究可视化度没有那么高,如何快速追踪到瓶颈呢?

xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。

Graphviz由一种被称为DOT语言的图形描述语言,可以根据提供的节点以及线生成图形。 xhprof 是可以使用graphviz生成图片的,这样分析的php程序运行过程更加直观。 如果你是centos系统,那么graphviz可以直接通过yum安装,否则就需要源码编译,源码编辑会非常困难,依赖的东西太多了。

1.  安装xhprof
wget http://pecl.php.net/get/xhprof-0.9.2.tgz

tar zxvf xhprof-0.9.2.tgz

cd xhprof-0.9.2/

cp -r xhprof_html xhprof_lib   /data/web/         #/data/web/为你站点的根目录

cd extension/

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make

cp modules/xhprof.so  /usr/local/php/ext/          #这里假设你的php扩展模块目录在/usr/local/ext/下,这个目录,你可以根据这个命令查找:/usr/local/php/bin/php -i |grep '^extension_dir'
2. 编辑php.ini
vim /usr/local/php/etc/php.ini        #加入如下配置:

[xhprof]
extension=xhprof.so
xhprof.output_dir=/data/web/xhprof_data
      
#其中/data/web/是你的网站根目录,xhprof_data目录需要自己手动创建,并赋予777权限

创建目录,更改权限

mkdir /data/web/xhprof_data

chmod 777 !$

重启apache或者重启php-fpm

更改要分析的php程序,假如你要分析的php程序为 index.php ,则在index.php中加入如下内容:

在顶部加入:

xhprof_enable();
//xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不记录内置的函数
//xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);  同时分析CPU和Mem的开销
$xhprof_on = true;

在底部加入:

// stop profiler
$xhprof_data = xhprof_disable();
//
// Saving the XHProf run
// using the default implementation of iXHProfRuns.
//
include_once "./xhprof_lib/utils/xhprof_lib.php";
include_once "./xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
// Save the run under a namespace "xhprof_foo".
//
// **NOTE**:
// By default save_run() will automatically generate a unique
// run id for you. [You can override that behavior by passing
// a run id (optional arg) to the save_run() method instead.]
//
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
echo "---------------\n".
"Assuming you have set up the http based UI for \n".
"XHProf at some address, you can view run at \n".
"http://yourdomain/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";
3. 安装graphviz
yum install -y graphviz
4.  理解xhprof输出

主要的:

Inclusive Time (或子树时间):包括子函数所有执行时间。 Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。 Wall时间:花去了的时间或挂钟时间。 CPU时间:用户耗的时间+内核耗的时间

表单中的

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% 峰值百分比

出现的问题解析:

xhprof查看性能测试图一直报错:failed to execute cmd: ” dot -Tpng”多种因素解决方案

最近在新环境进行php代码性能测试,用了xhprof这个工具,搭建好以后,点击[View Full Callgraph]查看性能分析图链接一直报错:failed to execute cmd: ” dot -Tpng”

原因一:未安装graphviz

  1. 如果看到 sh: dot: command not found ,说明服务器上没有安装画图软件graphviz 2.yum安装: yum install graphviz

原因二:php.ini设置了禁用proc_open方法

  1. 如果安装好了graphviz,仍然出现”failed to execute cmd”,检查下服务器上的php.ini中disable_functions这项是不是限制了proc_open,因为在xhprof_lib/utils/callgraph_utils.php的xhprof_generate_image_by_dot中使用了proc_open函数。
  2. 设置“disable_functions = “ 即可,一般没有必要在php.ini中关闭函数使用,人为修炼代码技术即可。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/11/30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.  安装xhprof
  • 2. 编辑php.ini
  • 3. 安装graphviz
  • 4.  理解xhprof输出
  • 出现的问题解析:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档