【问题标题】:Is there a way to log only executions slower than X with xdebug?有没有办法用 xdebug 只记录比 X 慢的执行?
【发布时间】:2013-02-13 07:58:30
【问题描述】:

我希望 xdebug 仅跟踪超过 X 毫秒或超过 Y KB RAM 的“跳转”,例如,每次执行时间超过 100 毫秒或内存使用量增加超过 100 KB。这将使我忽略数千条我不需要查看的跟踪行,并使优化变得更加容易 - 因为在 ZF2 中,臃肿的框架需要 1 秒才能从我们企业项目中的 composer 自动加载器开始,结果在数千行中我真的没有用。沿着这条线的某个地方,我确实发现执行时间的跳跃更大,但不是在长时间滚动之后。

是否有一个默认选项来禁用“比 X 更快”执行的日志记录,或者如果没有,您是否知道一个帮助 shell/python 脚本可以 grep 只是较慢的执行?

为了澄清,我说的是通过在我的应用程序中运行 xdebug_start_trace() 获得的 .xt 文件的内容。

【问题讨论】:

  • 你说的是xdebug.trace_*产生的输出,对吧?
  • 好问题,也想知道答案
  • @FAngel 更新了主要问题

标签: php performance debugging xdebug php-extension


【解决方案1】:

我对这些选项一无所知,但我可能建议使用配置文件而不是跟踪。

Here 是一篇如何使用它的文章。 如果简短,请将这些行放在您的 php.ini 文件中:

xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir="c:\Projects"

当你想启动分析器时,运行带有查询参数?XDEBUG_PROFILE=1的url

这将生成一个名称类似于cachegrind.out.* 的文件并将其放入profiler_output_dir

可以使用适用于您操作系统的 CacheGrind 查看器查看该文件。上面的链接有一个应用程序列表,用于查看不同平台的这些文件。我正在使用 wincachegrind(用于 Windows)来分析 ZendFramework 应用程序。对我来说非常有用的工具。界面允许查看调用树、执行时间、调用次数等。 好吧,但我看不到用它来测量内存使用情况的选项。

【讨论】:

  • 谢谢,我刚刚尝试使用 webgrind 分析缓存,但这些结果对我来说毫无用处。 “总调用成本”和“总包含成本”的值完全不相关,因为我看不到流程,也无法识别大跳跃和障碍——例如,function1() 在一种情况下可能需要 0.003 秒,另一个是 1.3 秒 - 这些痕迹并未反映这一点。因此,我想通过性能跳跃来过滤跟踪输出。
  • 嗯。不确定我完全理解你的意思,但在 wincachegrind 中,如果你右键单击功能,则会显示整体菜单项。在整个面板中,它显示了该函数的所有调用以及每个函数、调用者函数和文件的时间。此外,我浏览了网络,并且有用 PHP 编写的跟踪输出可视化工具。从未使用过这些,但您可能会发现它们很有帮助。
  • Here 是关于 SO 的一个问题,我在其中看到很少有跟踪输出查看器的链接。
  • 我目前使用的是 Mac,几乎没有可行的解决方案。有一个名为 MacCallGrind 的 30 美元实用程序、我似乎无法安装的 QCacheGrind 和只给我这些值的 webgrind。我想这是因为缺乏工具。我会试试那些 php 跟踪分析器 - 听起来像我正在寻找的东西。我尝试了该答案提到的 webgrind,接下来将尝试 GUI。
  • GUI 项目看起来很有希望,但编码很糟糕。它耗尽了内存,因为它尝试加载整个文件并且对跟踪格式和诸如此类有一些依赖性。我会看看我是否可以修复它并发回 - 否则,这正是我正在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 2020-12-04
  • 1970-01-01
  • 2021-05-14
  • 2018-09-23
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多