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'
编辑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中加入如下内容:
在顶部加入:在底部加入:2. 安装graphviz
yum install -y graphviz
3. 理解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% 峰值百分比
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'
编辑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";
yum install -y graphviz
3. 理解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% 峰值百分比
编辑回复