进入https://github.com/shenzhe/php-xhprof-extension/releases 选最新的稳定版本下载。
//我下载的5.0版本
wget https://github.com/shenzhe/php-xhprof-extension/archive/v5.0-beta3.tar.gz
//重命下名,git下的文件都只个版本号,重搞个名字好看点
mv v5.0-beta3.tar.gz xhprof-5.0-beta3.tar.gz
tar -zxvf xhprof-5.0-beta3.tar.gz
//进入解压的文件夹
cd php-xhprof-extension-5.0-beta3
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
最后显示这样就表示安装成功了
编辑php.ini文件,加上一行 extension= tideways_xhprof
然后
php -m
查看tideways_xhprof是否安装成功
编辑入口index.php文件,
在文件最开始,当然要在<?php 这个标签后面哈,输入如下代码:
tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY | TIDEWAYS_XHPROF_FLAGS_CPU);
然后在文件最末尾,当然要在 ?> 这个标签之前(如果有的话),输入如下代码:
file_put_contents('/home/www/html/xhprof_data/'. date('YmdHis') . '.msg-api.xhprof', serialize(tideways_xhprof_disable()));
(文件位置可自定义哟)
浏览器输入接口地址执行,在上面的目录下就会多出一个文件来。呵呵注意,我这里是按秒分的文件,所以不要执行太快哦,不然后面的文件会覆盖前面的文件的。
直接看文件是不行的,火眼金睛也看不明白,还是用xhprof来看吧
git clone https://github.com/phacility/xhprof
然后配置nginx :
将root指向xhprof_html,
fast_cgi那里用了$document_root变量的,在那个域里面也要指定个 root 到xhprof_html
最后配置个hosts域名(例如 v.xhprof.com),servername 就可以填个域名v.xhprof.com
nginx -s reload
重载下nginx配置。
然后就可以愉快的看表格化的性能数据了,哈哈,兄嘚别高兴得太早。xhprof没有php7的版本,如果你的环境是php7的话,还要在代码上加点调料。来来来,一步步搞。
第一个:入口index.php文件
增加一行,
//就是你上面file_put_contents的那个目录
$dir = "/home/www/html/xhprof_data/";
修改一行,
$xhprof_runs_impl = new XHProfRuns_Default();
修改为:
$xhprof_runs_impl = new XHProfRuns_Default($dir);
第二个:xhprof_lib/utils/xhprof_lib.php文件:
注释两行,
//xhprof_error("Error in Raw Data: parent & child are both: $parent");
//return;
第三个:xhprof_lib/utils/xhprof_runs.php文件
增加函数,
//“<?php” 标签的下面增加一个function,不要加到类或接口里面哦:
function yourFunction($a, $b) {
return filemtime($b) - filemtime($a);
}
修改一行,
usort($files, create_function('$a,$b', 'return filemtime($b) - filemtime($a);'));
改为:
usort($files, 'yourFunction');
现在就可以愉快的玩耍啦,浏览器输入你配的hosts域名,我的是 v.xhprof.com,就会显示如下界面:
要先跑你的laravel项目接口哦,不然是没有文件显示的哦。
点击文件就可以看到下面的信息啦。时间单位是微秒哈。百分比越大表示越耗时。好了,文章最后有表头字段的各个含义,慢慢看吧,看那些让你深恶痛绝的性能杀手在哪里。
表头字段含义:
Function Name:方法名称。
Calls:方法被调用的次数。
Calls%:方法调用次数所占百分比。
Incl.Wall Time(microsec):方法执行花费的时间,包括子方法。
IWall%:方法执行花费的时间百分比。
Excl. Wall Time(microsec):方法本身执行花费的时间,不包括子方法。
EWall%:方法本身执行花费的时间百分比。
Incl. CPU(microsecs):方法执行花费的CPU时间,包括子方法。
ICpu%:方法执行花费的CPU时间百分比。
Excl. CPU(microsec):方法本身执行花费的CPU时间,不包括子方法。
ECPU%:方法本身执行花费的CPU时间百分比。
Incl.MemUse(bytes):方法执行占用的内存,包括子方法。
IMemUse%:方法执行占用的内存百分比。
Excl.MemUse(bytes):方法本身执行占用的内存,不包括子方法。
EMemUse%:方法本身执行占用的内存百分比。
Incl.PeakMemUse(bytes):Incl.MemUse峰值。
IPeakMemUse%:Incl.MemUse峰值百分比。
Excl.PeakMemUse(bytes):Excl.MemUse峰值。
EPeakMemUse%:Excl.MemUse峰值百分比。