xhprof 工具安装
工欲善其事,必先利其器,xhprof是Facebook开源的轻量级PHP性能分析工具,它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销,XHProf数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。
这个工具可以大大提高性能优化, 工程师获取项目问题所在,从而开始优化。
安装过程如下:
下载安装
安装 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/
phpize (需要安装 php5-dev: apt-get install php5-dev)
./configure
make
make install
make test
安装 graphviz
apt-get install graphviz
配置 php.ini
echo "extension=xhprof.so" > /etc/php5/mods-available/xhprof.so
echo "xhprof.output_dir = /tmp/xhprof" >> /etc/php5/mods-available/xhprof.so
cd /etc/php5/fpm/conf.d/
ln -s ../../mods-available/xhprof.so 20-xhprof.so
service php5-fpm restart
配置 查看站点
git clone https://github.com/nosun/xhprof /data/www/xhprof.app
nginx 添加站点
server {
listen 80;
server_name xhprof.app;
index index.php index.html;
root /data/www/xhprof.app/public;
error_log /data/logs/nginx/xhprof_nginx_error.log info;
# This is only needed when using URL paths
try_files $uri $uri/ /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
填写配置文件
将目录下的 config.inc.example.php 修改为 config.inc.php。
里面的闭包函数,可以根据您的测试条件修改为您需要的。
埋点
修改auto_prepend_file配置
auto_prepend_file = /data/www/xhprof.app/inc/inject.php
这样所有的php-fpm请求的php文件前都会自动注入 /data/www/xhprof.app/inc/inject.php 文件
如果使用Nginx的话,还可以通过Nginx的配置文件设置,这样侵入性更小,并且可以实现基于站点的注入。
fastcgi_param PHP_VALUE "auto_prepend_file=/data/www/xhprof.app/inc/inject.php";
测试
在您的站点的nginx 配置中,或者php.ini中增加auto_prepend_file埋点,重启站点,nginx 和 fpm.
访问您需要测试的站点。
访问 http://xhprof.app,查看结果。
xhprof 主要参数
Inclusive Time (或子树时间):包括子函数所有执行时间。
Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
Wall时间:花去了的时间或挂钟时间。
CPU时间:用户耗的时间+内核耗的时间
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% 峰值百分比