sandstorm/plumber

TYPO3 Flow 和 Neos 的性能分析工具套件

安装: 4,697

依赖者: 0

建议者: 0

安全: 0

星标: 36

关注者: 16

分支: 9

公开问题: 2

语言:JavaScript

类型:neos-flow-package

3.1.0 2020-03-14 20:46 UTC

This package is auto-updated.

Last update: 2024-09-12 17:55:49 UTC


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 时启用。

概览页面

Overview

概览页面是分析器的入口点。它显示了不同的性能分析运行。对于每次性能分析运行,它可以显示概览信息,如创建的对象数量或内存消耗。表格的每一列都称为 维度

在顶部,柱状图显示了给定维度中值的分布,并允许您筛选不同的维度到所需值。

您可以轻松创建自己的维度;如何做到这一点将在后面解释。

时间线页面

时间线页面提供了对请求的视觉概述,显示了请求的计时器以及内存消耗如何变化。

Timeline

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许可证。