问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在本地配置php分析工具xhprof

发布网友 发布时间:2022-04-06 05:38

我来回答

1个回答

热心网友 时间:2022-04-06 07:08

XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销,XHProf数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。

一,如何安装?

1,下载最新的xhprof包
下载下来:
wget https://pecl.php.net/get/xhprof-0.9.4.tgz
解压:
tar -xvf xhprof-0.9.4.tgz
2,编译安装pecl扩展库
参考地址:http://php.net/manual/zh/install.pecl.phpize.php
cd xhprof-0.9.4/extension/
phpize
./configure
make
sudo make install
编译成功后,在扩展库目录中会有一个xhprof.so文件

扩展库目录地址:/usr/lib/php5/20121212/

3,修改php配置文件

由于我的电脑用的是php-cgi,需要添加一个配置。

cd /etc/php5/cgi/conf.d
新建:xhprof.ini文件

extension=xhprof.so
4,重启php,重启php-cgi

重启php:

sudo service php5-fpm restart
重启php-cgi

kill -9 17445

php-cgi -b 127.0.0.1:9000&
5,复制xhprof到网站根目录

比如我的根目录为:/data/webroot/

复制两个目录即可:

cp -r xhprof_html/ /data/webroot/
cp -r xhprof_lib/ /data/webroot/
6,查看本地环境是否正确安装了xhprof

新建文件:info.php

<?php
echo phpinfo();
如果能在页面中搜索到xhprof,表示已经正确安装了xhprof:

xhprof

xhprof 0.9.4
CPU num 4
二、xhprof使用
在下载的目录里面有一个文件 examples/sample.php 文件

<?php

function bar($x) {
if ($x > 0) {
bar($x - 1);
}
}

function foo() {
for ($idx = 0; $idx < 5; $idx++) {
bar($idx);
$x = strlen("abc");
}
}

// start profiling
xhprof_enable();

// run program
foo();

// stop profiler
$xhprof_data = xhprof_disable();

// display raw xhprof data for the profiler run
print_r($xhprof_data);

$XHPROF_ROOT = realpath(dirname(__FILE__) .'/..');
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

// save raw data for this profiler run using default
// implementation of iXHProfRuns.
$xhprof_runs = new XHProfRuns_Default();

// save the run under a namespace "xhprof_foo"
$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://localhost/xhprof/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";

在浏览器查看这个文件会显示下面的代码:

--------------- Assuming you have set up the http based UI for XHProf at some address, you can view run at http://localhost/xhprof/index.php?run=562614ece2e2d&source=xhprof_foo ---------------

这时访问:http://localhost/xhprof/index.php 会出现几个文件:

No XHProf runs specified in the URL.

Existing runs:

562614ece2e2d.xhprof_foo.xhprof 2015-10-20 18:18:20
562614e0b76b2.xhprof_foo.xhprof 2015-10-20 18:18:08
562614a33f6ec.xhprof_foo.xhprof 2015-10-20 18:17:07
5626146be4aaf.xhprof_foo.xhprof 2015-10-20 18:16:11
5626146324cdd.xhprof_foo.xhprof 2015-10-20 18:16:03
点击进去一个:

http://localhost/xhprof/index.php?run=562614ece2e2d&source=xhprof_foo

点击[View Full Callgraph]  可能会报错

failed to execute cmd: " dot -Tpng". stderr: `sh: 1: dot: not found '

是因为没有安装图形化工具

sudo apt-get install graphviz

安装完后,再打开,就可以看到视图了。

复制代码
名词:
1. Inclusive Time :包括子函数所有执行时间。
2. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
3. Wall Time:花去了的时间或挂钟时间。
4. CPU Time:用户耗的时间+内核耗的时间
5.Inclusive CPU:包括子函数一起所占用的CPU
6.Exclusive CPU:函数自身所占用的CPU
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
远得要命的爱情丁菲是谁演的 远的要命的爱情里的乔佳影是谁演的 远得要命的爱情乔佳影是什么角色 问。。我在厦门办的银行卡回江西可以用吗? 远得要命的爱情中的乔佳影是个怎样的人 厦门农信社的公告出来了,想问一下银行合同制和劳务派遣和正式工的区别... 厦门的信用社银联卡到南宁能不能用?要不要手续费? 泉州农信社年前新办的卡,存了钱,银行说三个工作日后才能动这个钱,为什 ... ...女鞋的话 是不是必须直通车 我们鞋子都是20---50鞋子利润低 直通车... 拼多多直通车200红包(拼多多直通车每天烧1000) 分析PHP的一段代码有不明之处 拿到一个php源码怎么分析它用的是什么框架?? 有没有一种工具可以分析PHP用户定义函数调用开销 自己开发的Web服务器如何解析php文件 php能做大数据分析吗 PHP代码分析 帮我分析下学习php怎么样 php程序分析; 请问一般怎么分析一个PHP项目源代码 怎么写一份php需求分析呢? 如何分析PHP职位要点 ajax POST方式传输数据给php 用ajax调用以response输出到客户端导出excel不成功,不报错也不提示下载 怎样实现在网页上用户选择下载excel版的查询数据 php读取excel文件示例分享(更新修改excel) 请问,使用ajax成功取一出个文档对象,但怎样才能下载,可以在请求时自动下载吗? asp.net怎样利用ajax将前端数据导出为excel asp.net Jquery ajax 如何下载excel 怎么样下载ajax post文件? Ajax实现excel导出 从php核心代码分析require和include的区别 jquery ajax 跨域问题 jquery ajax从一个网站向另一个网站请求,怎么实现 jquery ajax跨域获取当前用户的ip地址及相关信息, jquery的ajax 跨域请求 用jquery怎么实现跨域请求 如何解决AJAX跨域的问题 用jquery的ajax方法调用的php页面中有js代码,怎么让它执行啊 用jquery的ajax方法调用的php页面中有js代码,怎么让它执行? jquery通过ajax调用php取得返回值,怎么做? Jquery AJAX跨域问题怎么解决 如何实现jquery跨域获取其他网站上的数据? 如何利用jquery使用ajax后返回2.php到div后,继续从2.php的返回内容中触发并使用ajax返回3.php的内容? php 中ajax能跨域请求吗 配置Thinkphp时出现问题 ?如何解决 thinkphp 设置了这些配置项,INDEX控制器就出问题了,求解! 怎么用vue-resource与thinkphp配合~呢? thinkphp开发遇到问题求教 php thinkphp3.2 没有定义数据库配置错误怎么解决 用thinkPHP开发网站的问题