过滤火焰图

Cloud Profiler 可让您添加过滤条件来控制所选性能剖析文件中信息的显示方式。例如,您可以添加过滤条件以隐藏特定帧或调用堆栈。添加和移除过滤条件不会更改您选择的一组性能剖析文件。

每个过滤条件都由与用户定义的 VALUE 配对的预定义 FILTER-OPTION 指定:

[FILTER-OPTION] : [VALUE]

您添加的每个过滤条件都会显示在过滤栏上。此示例包含一个显示 Metric : Bytes 的过滤条件:

显示的过滤条件带有指标选项,指标的值为“字节”。

Profiler 会自动创建一个过滤条件,其 FILTER-OPTIONMetric,而 VALUE 基于您选择的性能剖析文件类型。您可以更改某些性能剖析文件类型的 VALUE。您无法移除此过滤条件。

如需添加过滤条件,请使用以下任一方法:

  • 点击过滤条件 ,从列表中选择相应选项,然后输入值。
  • 点击过滤栏中的灰色文本添加性能剖析文件数据过滤条件,然后输入相应的过滤条件选项和值。
  • 对于突出焦点显示部分堆栈(从特定帧开始)显示堆栈过滤条件选项,您还可以将指针放在帧上,然后从帧提示中选择相应选项。

如需移除过滤条件,请点击过滤条件上的关闭

在准备要显示的数据时,Profiler 会搜索帧与过滤条件之间的匹配项。 发生匹配时,Profiler 使用 FILTER-OPTION 来确定要执行的操作。当帧的函数名称或函数源的文件名包含 VALUE 时,该帧与过滤条件匹配。系统会执行区分大小写的比较操作。例如,如果过滤条件是 Hide frames : oo,则系统会在火焰图中隐藏函数名称为 foofoo1busyloop 的帧。

指标

如需设置性能剖析文件类型聚合模式,请使用指标过滤条件。 例如,如果选择性能剖析文件类型,您可以选择直观呈现字节对象数据。

指标过滤条件的可用选项取决于编程语言和所选的性能剖析文件类型

  • 对于 CPU 时间性能剖析文件,仅有 CPU 时间这一个选项。
  • 对于性能剖析文件,选项包括:

    • 字节
    • 对象
  • 对于分配的堆性能剖析文件,选项包括:

    • 总分配字节数
    • 总分配对象数
  • 对于实际用时性能剖析文件,选项包括:

    • 计数
    • 实际用时
  • 对于线程性能剖析文件,仅有 Goroutine 这一个选项。

  • 对于争用性能剖析文件,选项包括:

    • 延迟
    • 争用

如需详细了解性能剖析指标的类型,请参阅性能剖析相关概念

例如,以下屏幕截图显示了某个程序的 CPU 耗用情况:

显示 CPU 使用率的 Profiler 图

在此示例中,您可以看到 busyloop 例程调用了 foo1foo2,这两者还调用了各种其他例程。您可以添加过滤条件进一步限制火焰图,以便只显示感兴趣的数据。

突出焦点

使用突出焦点过滤条件时,您需要选择一个函数,然后火焰图会显示所有流入和流出该特定函数的代码路径。

如需详细了解如何让火焰图突出焦点以及如何解读结果,请参阅让火焰图突出焦点

显示堆栈

要显示包含与过滤条件值匹配的帧的所有调用堆栈,并隐藏所有其他调用堆栈,请使用显示堆栈过滤条件。火焰图会显示函数的调用者和被调用者,即调用匹配函数的所有内容及其调用的所有内容。

此过滤条件执行区分大小写的子字符串测试。如果帧函数包含过滤条件值,则会发生匹配。

如需让上一示例中的 CPU 使用率图仅显示涉及函数 foo1 的调用堆栈,请将显示堆栈过滤条件设置为 foo1

显示 CPU 使用率的 Profiler 图,过滤条件为“显示堆栈”

隐藏堆栈

隐藏所有包含与过滤条件值匹配的帧的调用堆栈。当您想要隐藏不感兴趣的堆栈时,此过滤条件通常很有用。例如,对于 Java 应用,添加一个 Hide stacks: unsafe.park 过滤条件是很常见的。

此过滤条件执行区分大小写的子字符串测试。如果帧函数包含过滤条件值,则会发生匹配。

显示部分堆栈(从特定帧开始)

如需显示从与过滤条件值匹配的帧开始的所有调用堆栈,并隐藏所有其他调用堆栈,请使用显示部分堆栈(从特定帧开始)过滤条件。生成的图显示了从指定函数向下的调用堆栈。 如果从多个位置调用函数且您希望看到归因于该函数的总耗用情况,此过滤条件非常有用。

例如,若要仅显示从 baz 函数发出的调用,请将显示部分堆栈(从特定帧开始)过滤条件设置为 baz

显示 CPU 使用率的 Profiler 图,过滤条件为“显示部分堆栈(从特定帧开始)”

此过滤条件执行区分大小写的子字符串测试。如果帧函数包含过滤条件值,则会发生匹配。

隐藏帧

如需隐藏与过滤条件值匹配的所有帧,请使用隐藏帧过滤条件。火焰图会显示函数调用者,并将该函数的所有被调用者收集在一起。这有助于从图中移除不相关的帧。

例如,若要隐藏 foo1foo2 的帧,请将隐藏帧过滤条件设置为 foofoo1foo2 均符合匹配,因此这两者都会从图中移除。因为它们都会调用 barbaz 例程,所以这两者的数据会聚合在一起。

显示 CPU 使用率的 Profiler 图,过滤条件为“隐藏帧”

此过滤条件执行区分大小写的子字符串测试。如果帧函数包含过滤条件值,则会发生匹配。

突出显示

要突出显示函数名称与过滤条件值匹配的所有帧,请使用突出显示过滤条件。这类函数会保持正常颜色模式,但调用序列的颜色会采用更加柔和的色调。

例如,下面是一个没有突出显示的图:

没有突出显示的性能剖析图

下面是同一火焰图,但突出显示了 baz 函数:

有突出显示的性能剖析图

此过滤条件执行区分大小写的子字符串测试。如果帧函数包含过滤条件值,则会发生匹配。

颜色模式

默认情况下,帧颜色会尽可能对应函数包。如果函数包信息不可用,那么与 Node.js 一样,帧会使用源文件的名称为函数块着色。 使用默认设置时,如果调用堆栈帧颜色发生变化,则意味着从一个包转换为了另一个包。 默认选项对应值为名称颜色模式过滤条件。

如需按照函数及其子函数的耗用情况为火焰图中的帧着色,请添加颜色模式过滤条件并将其值设置为总计。如果通过多个调用堆栈调用函数,则颜色由所有调用堆栈的指标耗用情况决定。 例如,mainbusyloop 会显示为红色。这两个帧耗用的 CPU 时间最多。加有 foo2baz 标签的帧采用深橙色,而加有 foo1 标签的帧采用浅橙色。barload 的帧颜色最浅。以下火焰图说明 foo2 耗用的 CPU 时间比 foo1 多,但比 busyloop 少:

值为“总计”的颜色模式

如需按照函数的指标耗用情况(不包括其子函数的指标耗用情况)为火焰图中的帧着色,请添加颜色模式过滤条件并将其值设置为自身。 例如,此过滤条件显示 baz 函数耗用的 CPU 时间比其他任何函数都要多:

值为“本身”的颜色模式

后续步骤