Loading...

PHP性能分析手札(XDebug篇)

Web开发 2年前 (2022) LINSIR
143 0 0

0x01 环境及背景说明

  • php7.4
  • XDebug3

大家都说用Xhprof号,但是我手头已安装XDebug,那就先用用看(所以安装的部分大家自行找下网上教程吧,大同小异)

0x02 配置XDebug

编辑php.ini(宝塔路径:/www/server/php/74/etc/php.ini),增加以下代码块:

[xdebug]
#这里路径根据实际情况修改,我的是宝塔自动安装的,这一行已经自带,建议直接将自带的放在这里
zend_extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
#以下仅适用XDebug3
#启用哪些功能(多个功能逗号分隔),develop开发助手(更详细的var_dump),debug单步调试,trace函数跟踪,profile性能分析,详解见https://xdebug.org/docs/all_settings#mode
xdebug.mode = develop,profile
#何时运行,trigger就是在有指定参数时才执行,详解见https://xdebug.org/docs/all_settings#start_with_request
xdebug.start_with_request = trigger
# 分析文件保存目录,按需更改,详解见https://xdebug.org/docs/all_settings#output_dir
xdebug.output_dir=/var/tmp/xdebug

完成后重载配置(或者直接重启),检查有没有报错

Cannot load Xdebug - it was already loaded

这个报错是配置文件的zend_extension重复了,将原先的删掉或覆盖新增的

(非必看)在网上找教程遇到的坑

网上大多都是XDebug2的配置方法,如下:

[xdebug]
zend_extension="/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so"
# profiler功能的开关,默认值0,如果设为1,则每次请求都会生成一个性能报告文件。
# xdebug.profiler_enable=0
# 默认值是0,如果设为1 则当我们的请求中包含 XDEBUG_PROFILE 参数时才会生成性能报告文件
xdebug.profiler_enable_trigger=1
# 分析文件保存目录, 默认是 /var/tmp
xdebug.profiler_output_dir="/var/tmp/xdebug"

然后遇到了如下报错

[24-May-2022 00:02:03] NOTICE: PHP message: Xdebug: [Config] The setting 'xdebug.profiler_enable_trigger' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.profiler_enable_trigger (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)
[24-May-2022 00:02:03] NOTICE: PHP message: Xdebug: [Config] The setting 'xdebug.profiler_output_dir' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.profiler_output_dir (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)
[24-May-2022 00:03:39] NOTICE: PHP message: Xdebug: [Config] The setting 'xdebug.profiler_output_dir' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.profiler_output_dir (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)

这个问题是因为“Xdebug 3 删除并更改了很多配置设置”(官网机翻),我根据提示找到了官网,参考说明将该段配置改为最上边的配置

0x02 运行XDebug

xdebug.start_with_request = trigger的情况下,$_ENV(环境变量)、$_GET$_POST$_COOKIE中带有XDEBUG_TRIGGER均可触发,例如我要调试:

https://www.linsir.cc/index.php

只需要将地址改为:

https://www.linsir.cc/index.php?XDEBUG_PROFILE

即可触发函数,然后按照在你设置的输出文件夹(xdebug.profiler_output_dir)下找到输出物(例如我的是cachegrind.out.598660

0x03 解析分析报告

选用分析软件

首先上场的是WinCacheGrind,打开后报错Cannot find call target,经查WinCacheGrind仅适用于XDebug 2,目前不再维护,项目推荐了QCacheGrind,当然如果你还在用2的话,可以看看这篇教程

另外,网友还推荐了phpstrom的Profiling with Xdebug,当然,这货太大了,在不用ta的情况下只为了debug安装多少有点不值

开始分析

QCacheGrind左上角打开输出物(文件类型改为全选后可选输出物),即可看到结果

左侧栏目含义如下(推测):

Incl.:表示此函数整体花费的时间,包含此函数调用的其他函数,单位是百分比。

Self:表示此函数自己花费的时间,不包含此函数调用的其他函数。

Called:表示此函数被调用的次数

版权声明:LINSIR 发表于 2022-05-24 11:15。
转载请注明:PHP性能分析手札(XDebug篇) | LINSIR的博客

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...