在工作中经常会遇到一个API响应慢, 慢到高峰期超过十几秒,甚至更慢。这也不奇怪,一个只靠PHP和MYSQL硬撑住的系统怎么能不慢,当然还得有人写出最方便的SQl才能让慢的感觉更明显。
一个简单的api还是比较容易查出症结在那里,可对于经过多人长时间的维护,不断累加的需求的几百上千行错综复杂的调用关系的API来说,光靠打几个log已经不行了。我曾经只靠人工看代码和定点打log来判断,这个过程繁琐和不准确,所以我一直想找一个工具来代替我来做这个事。
这就是Xdebug3.1.3,这个版的xampp自带的是2.7,版本有点老了。测试环境是CI3框架,xampp3.2.4,PHP7.3.7 ,把xdebug.dll放到php扩展目录后,还要在php.ini增加下列几行配置让它生效。
extension=php_xdebug
[Xdebug]
xdebug.mode = profile
xdebug.profiler_enable=on
xdebug.output_dir = G:\xampp-7\php\tmp
xdebug.profiler_output_name = "cachegrind.out.%p"
重启php后,如果能看到下面的内容,就是有效了:
好了,现在每次访问站点页面或是API都会在 'G:\xampp-7\php\tmp' 目录里生成一个日志文件如:(cachegrind.out.14940)
这个文件里实际上已经有了需要的东西,可是太难读了,所以还需要一个分析工具来让结果更观清晰。在windows环境下可以用这个工具(qcachegrind074-32bit-x86),可以这在个里下载:
https://sourceforge.net/projects/qcachegrindwin/
这是个绿色无需安装的工具,运行它的可执行文件,并在file里选择读取xdebug文件的路径后,就可以分析显示图形结果,的确是好用,下面是显示界面: