sandstorm / plumber
TYPO3 Flow 和 Neos 的性能分析工具套件
Requires
- neos/flow: *
- sandstorm/phpprofiler: dev-master
README
-- 测量应用程序的流程 --
Plumber 是一个带有以下功能的性能分析和跟踪图形用户界面
- 列出 所有性能分析运行概览
- 显示单个性能分析运行的 图形时间线
- 筛选 图形时间线
- 显示单个性能分析运行的 xhprof 分析器
- 比较 使用时间线的时间分析运行
- 标记 您的性能分析运行
- 在概览中显示 聚合统计信息
它依赖于 PhpProfiler 来收集所需的信息。
安装
警告:不要在生产网站上安装 Plumber。如果您这样做,请确保禁止访问分析器 URL。
要安装,只需使用 composer
composer require --dev sandstorm/plumber 3.0.*
系统将自动安装 PhpProfiler,如果已安装,则使用 XHProf。
在 mac 上安装 XHProf / Tideways
XHProf 已不再受支持,但 Tideways 数据格式仍然100%兼容 - Tideways PHP 扩展仍然是100%开源
# for PHP 8.1 brew install kabel/pecl/php@8.1-tideways-xhprof # for older versions brew install tideways/homebrew-profiler/php71-tideways --env=std echo "tideways.auto_prepend_library=0" >> /usr/local/etc/php/7.1/conf.d/ext-tideways.ini
配置
一些设置在 Plumber 和 PhpProfiler 中也是可用的,以及 TYPO3 CMS 扩展,但对于基本操作来说,都不是必需的。如果您有兴趣,可以自由调查它们。
用法
正常使用您的 Web 应用程序。要浏览性能分析报告,请转到 http://yourhost/profiler/
。
对于每次运行,分析器收集以下数据
- 当前运行的元信息(如:请求被调用的上下文,所使用的控制器)
- 可以启动和停止的计时器,测量应用程序流程的详细信息。
- 完整的 XHProf 配置文件,包含运行的(几乎)完整的调用图。这仅在安装了 XHProf 时启用。
概览页面
概览页面是分析器的入口点。它显示了不同的性能分析运行。对于每次性能分析运行,它可以显示概览信息,如创建的对象数量或内存消耗。表格的每一列都称为 维度。
在顶部,柱状图显示了给定维度中值的分布,并允许您筛选不同的维度到所需值。
您可以轻松创建自己的维度;如何做到这一点将在后面解释。
时间线页面
时间线页面提供了对请求的视觉概述,显示了请求的计时器以及内存消耗如何变化。
XHProf 页面
您还可以钻到 XHProf 页面,显示运行的详细统计信息。
配置自定义维度
可用的维度在 Settings.yaml
中配置,您也可以通过这种方式添加新维度。
让我们来看看默认维度是如何工作的
Sandstorm: Plumber: calculations: methodCallsOnObject: label: 'No. of Method Calls' type: regexSum regex: '#==>(.*)::.*#' totalRuntime: label: 'Runtime (ms)' type: timerSum timerName: 'Profiling Run' totalMemory: label: 'Memory (kb)' type: maxMemory
它定义了三个维度,并为每个维度提供了一个标签。每个维度都有一个 type
,它指定了该维度内部数据的聚合方式。
我们支持以下类型
maxMemory
参数: 无
以千字节为单位输出已使用的最大内存。
totalRuntime
参数: timerName
此功能将指定 timerName
的计时器的总运行时间(以毫秒为单位)加起来。
regexSum
参数: regex
这是一个最通用的计数器。需要 安装 XHProf,否则无法工作。
它计算XHProf跟踪中方法调用的次数。要了解regex
参数如何工作,我们需要检查XHProf跟踪是如何构建的。
XHProf跟踪是一个包含如下元素的大数组。
'Sandstorm\PhpProfiler\Domain\Model\ProfilingRun::startTimer==>microtime' (76) => array(2) 'ct' (2) => integer 10 'wt' (2) => integer 9
这意味着:“从ProfilingRun
中的方法startTime
内部调用microtime
函数10次。所有这些对microtime的调用总共需要9毫秒。”
我现在还不确定时间尺度,是微秒还是毫秒...
现在,regexSum
会遍历这样的跟踪,如果正则表达式与数组键匹配,它将计算总的调用次数。
例如,让我们用一些正则表达式来演示。
#==>.*__construct# Matches all constructor invocations
#==>.*TextNode::__construct# Matches all constructor invocations of classes which end with TextNode
#.*# Matches all method calls
#.*==>Doctrine\\Common.*::__construct#'
Matches all object creations inside the Doctrine\Common package
此外,正则表达式可能恰好包含一个子匹配模式。在这种情况下,将显示一个弹窗,其中按正则表达式分组显示前10次调用。示例
#==>(.*)::__construct# Matches all constructor invocations, displaying a Top 10 list of constructor invocations
#==>TYPO3\\Fluid\\(.*)::__construct# Matches constructor invocations in Fluid, displaying a Top 10 list of constructor invocations inside the fluid package
正则表达式
参数
regex
: '...'(见regexSum
)metric
:time|calls|memory
subtype
:sum|average
您的自定义类型
目前无法使用自定义类型。
计算发生在Sandstorm\Plumber\Service\CalculationService
内部,如果您想扩展它。确保然后提交一个pull request:-)。
分析自定义代码
PhpProfiler文档中提供了如何分析自定义代码的说明。
致谢
由Sebastian Kurfürst,Sandstorm Media GmbH开发。由多位作者提交pull request。
许可证
所有代码均采用GPL许可证。