最近发现测试环境接口响应巨慢,为了验证是哪里出了问题,遂引入性能测试。由于使用的php7,目前可用的性能测试扩展似乎只有php-xhprof-extension可选。
下载安装:https://tideways.com/profiler/downloads
以下为centos安装方法
echo "[tideways]
name = Tideways
baseurl = https://s3-eu-west-1.amazonaws.com/qafoo-profiler/rpm" > /etc/yum.repos.d/tideways.repo
rpm --import https://s3-eu-west-1.amazonaws.com/qafoo-profiler/packages/EEB5E8F4.gpg
yum makecache --disablerepo=* --enablerepo=tideways
yum install tideways-php tideways-cli tideways-daemon安装
安装好后,重启php-fpm
service php-fpm restart
如报异常:
Module ‘tideways’ already loaded in Unknown on line 0 可能是tideways重复加载了。
[root@test]# php -i | grep .ini$
Loaded Configuration File => /etc/php.ini
/etc/php.d/tideways.ini
user_ini.filename => .user.ini => .user.ini
vi /etc/php.d/tideways.ini
注释掉:extension=tideways.so
这时检查下扩展是否已经引用
php -m | grep tide tideways 模块就做好了。
下面开始使用,官网文档使用是这样的:
<?php
tideways_xhprof_enable();
my_application();
$data = tideways_xhprof_disable();
file_put_contents("/tmp/profile.xhprof", serialize($data));
其实就是两个函数的使用,但是当你使用时会报错,什么错误呢
PHP Fatal error: Uncaught Error: Call to undefined function tideways_xhprof_disable() 再次确认下tideways扩展有没有装好,可以用phpinfo()看一下。发现已经引入了模块。
这就很奇怪了。
再一番Google后,找到了这个问答的评论部分 https://stackoverflow.com/questions/38103784/how-to-use-tideways-on-own-server
Thank you for this. The projects own documentation contains incorrect commands (i.e. tideways_xhprof_enable() and tideways_xhprof_disable()) which meant all I could ever get was fatal errors. Remove the _xhprof token and it all works 🙂
啥意思呢?
就是把函数tideways_xhprof_enable();中的_xhprof去掉就可以了。
然后本人试了下,改成这样
<?php
tideways_enable();
echo "test";
$data = tideways_disable();
file_put_contents("/tmp/profile.xhprof", serialize($data));
这时就可以了,原来方法名都已经改了😳
运行完后可以读取文件,然后反序列化就可以拿到分析结果了。
类似这样:
<?php
array(
"main()" => array(
"wt" => 1000,
"ct" => 1,
"cpu" => 400,
),
"main()==>foo" => array(
"wt" => 500,
"ct" => 2,
"cpu" => 200,
),
"foo==>bar" => array(
"wt" => 200,
"ct" => 10,
"cpu" => 100,
),
)
关于对数据的处理和展示,后续有空的时候更新。