为啥 Blackfire 分析器报告 10 倍时间?

Posted

技术标签:

【中文标题】为啥 Blackfire 分析器报告 10 倍时间?【英文标题】:Why Blackfire profiler reports 10x time?为什么 Blackfire 分析器报告 10 倍时间? 【发布时间】:2018-03-22 12:34:19 【问题描述】:

在测试本地站点时,我注意到 Blackfire 报告的时间与其他来源相比相差约 10 倍。

设置:

通过 Homebrew 本地安装所有堆栈的 macOS High Sierra(类似于 Laravel 的代客) nginx 1.13.9 php 7.2.3,带 opcache Xdebug 2.6.0(在分析期间禁用) 黑火代理 1.16.0 黑火探测器 1.18.2 具有默认主题和设置的最新 WordPress,使用自定义 Composer 驱动的框架创建,其中 WP 本身就是一个依赖项 Composer 的自动加载器已优化 HTTPS(自签名,使用自定义本地 CA 签名) HTTP/2

结果:

黑火:321ms Chrome 的网络计时 (TTFB):34.80 毫秒 WordPress - 查询监视器插件:0.03 秒(或 30 毫秒) WordPress - Laps 插件:0.029 秒(或 29 毫秒) CLI curl -s -o /dev/null \-w "%time_total\n" -k https://wp.test 循环 10 次:平均 0.044 秒(或 44 毫秒,单个运行增量为 2-3 毫秒)

多次测试。除 Blackfire 之外的所有来源都非常一致,报告时间在 30-50 毫秒范围。感知到的加载时间是“即时的”,就像真正的 30-50 毫秒一样。 350 毫秒的加载时间很明显,这就是为什么我相信 Blackfire 就在这里。

我做错了什么?以前没有注意到这一点。

更新:

    测试了其他一些 php 文件 - 一个仅包含 phpinfo 的基本文件、memcached 和 opcache 管理脚本 - 所有这些都非常快,而且 Blackfire 报告的时间与其他方法相同。 在 Vagrant VM(Laravel 的 Homestead)上测试,所有 WordPress 网站都很快,Blackfire 也报告了与其他方法相同的时间。

考虑到上述情况,带有本地 EMP 堆栈的 Blackfire + WordPress + macOS High Sierra 肯定有问题。

【问题讨论】:

那么一个是从远程(blackfire)报告,另一个是本地主机(chrome)? 不,Blackfire 是本地的。探针是本地 PHP 扩展,代理是本地代理。一切都在同一台机器上。 Blackfire.io remote 网站仅用于分析收集的个人资料数据。 【参考方案1】:

分析代码 - 任何语言 - 都会增加一些开销。这取决于引擎、代码和其他一些变量,例如运行分析代码的计算机。在您的情况下,开销使页面运行速度慢了 10 倍。增加的缓慢是等距的,这意味着您可以使用结果来推理和改进您的代码。

这是 Blackfire 与开销相关的文档的指针https://blackfire.io/docs/reference-guide/analyzing-call-graphs#understanding-blackfire-overhead

tideways 还有一篇关于 PHP 7、分析和开销的博文https://tideways.io/profiler/blog/profiling-overhead-and-php-7

【讨论】:

你好,Ihor。您对我的回答的讽刺使我感到不舒服。我花了一些时间来回答你。我告诉过你“一些其他变量,比如运行分析代码的计算机”。您在这里观察到的是,根据环境,分析开销会有所不同。干杯, 我重新阅读了我的 cmets 并承认我不必要地过度讽刺了。对此感到抱歉。删除它们,让我们重新开始。在问这个问题之前,我已经排除了开销的影响。这是另一回事。到目前为止,我将其范围缩小到与文件系统相关的函数(require(_once)、file_exists)。所以,很可能是 APFS。

以上是关于为啥 Blackfire 分析器报告 10 倍时间?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Blackfire 进行 PHP 分析

Blackfire 失败“配置文件数据被截断”

为啥 Mongo 提示使查询运行速度提高 10 倍?

Google Analytics 报告的会话数比服务器日志中的命中数少 10 倍

纯 C++ 代码比内联汇编程序快 10 倍。为啥?

s-s-rS - 将报告复制到新文件夹将速度提高 10 倍