使用 CPU 分析器视图
CPU 分析器视图允许您记录和分析来自 Dart 或 Flutter 应用程序的会话。分析器可以帮助您解决性能问题或通常了解应用程序的 CPU 活动。Dart VM 收集 CPU 样本(单个时间点的 CPU 调用栈快照)并将数据发送到 DevTools 进行可视化。通过将许多 CPU 样本聚合在一起,分析器可以帮助您了解 CPU 在哪里花费了大部分时间。
CPU 分析器
#单击**录制**开始录制 CPU 分析。录制完成后,单击**停止**。此时,CPU 分析数据将从 VM 中提取并在分析器视图(调用树、自下而上、方法表和火焰图)中显示。
要加载所有可用的 CPU 样本而无需手动录制和停止,您可以单击**加载所有 CPU 样本**,这将提取 VM 已录制并存储在其环形缓冲区中的所有 CPU 样本,然后在分析器视图中显示这些 CPU 样本。
自下而上
#此表提供了 CPU 分析的自下而上的表示。这意味着自下而上表中的每个顶级方法或根实际上是其中一个或多个 CPU 样本的调用栈中的顶级方法。换句话说,自下而上表中的每个顶级方法都是自上而下表(调用树)中的叶子节点。在此表中,可以展开方法以显示其调用者。
此视图可用于识别 CPU 分析中代价高昂的方法。当此表中的根节点具有较高的自身时间时,这意味着此分析中的许多 CPU 样本都以该方法位于调用栈顶部而结束。
请参阅下面的指南部分,了解如何启用此图像中显示的蓝色和绿色垂直线。
工具提示可以帮助您理解每一列中的值
- 总时间
- 对于自下而上树中的顶级方法(至少在一个 CPU 样本中位于顶部的栈帧),这是该方法花费在执行自身代码以及它调用的任何方法的代码上的时间。
- 自身时间
- 对于自下而上树中的顶级方法(至少在一个 CPU 样本中位于顶部的栈帧),这是该方法花费在仅执行自身代码上的时间。
对于自下而上树中的子方法(调用者),这是顶级方法(被调用者)在通过子方法(调用者)调用时的自身时间。
表元素(自身时间)
调用树
#此表提供了 CPU 分析的自上而下的表示。这意味着调用树中的每个顶级方法都是一个或多个 CPU 样本的根。在此表中,可以展开方法以显示其被调用者。
此视图可用于识别 CPU 分析中代价高昂的路径。当此表中的根节点具有较高的总时间时,这意味着此分析中的许多 CPU 样本都以该方法位于调用栈底部而开始。
请参阅下面的指南部分,了解如何启用此图像中显示的蓝色和绿色垂直线。
工具提示可以帮助您理解每一列中的值
- 总时间
- 方法花费在执行自身代码以及它调用的任何方法的代码上的时间。
- 自身时间
- 方法花费在仅执行自身代码上的时间。
方法表
#方法表提供 CPU 分析中包含的每个方法的 CPU 统计信息。在左侧的表中,列出了所有可用方法及其总时间和自身时间。
总时间是方法花费在调用栈任何位置上的总时间,或者换句话说,是方法花费在执行自身代码以及它调用的任何方法的代码上的时间。
自身时间是方法花费在调用栈顶部的总时间,或者换句话说,是方法花费在仅执行自身代码上的时间。
从左侧的表中选择一个方法将显示该方法的调用图。调用图显示方法的调用者和被调用者及其各自的调用者/被调用者百分比。
火焰图
#火焰图视图是调用树的图形表示。这是 CPU 分析的自上而下的视图,因此在此图表中,最顶层的方法调用其下方的那个方法。每个火焰图元素的宽度表示方法花费在调用栈上的时间量。
与调用树一样,此视图可用于识别 CPU 分析中代价高昂的路径。
帮助菜单(可以通过单击搜索栏旁边的?
图标打开)提供有关如何在图表中导航和缩放以及颜色编码图例的信息。
CPU 采样率
#DevTools 设置了 VM 收集 CPU 样本的速率:1 个样本/250 μs(微秒)。这在 CPU 分析器页面上默认为“Cpu 采样率:中等”。可以使用页面顶部的选择器修改此速率。
低、中和高采样率分别为 1,000 Hz、4,000 Hz 和 20,000 Hz。了解修改此设置的权衡取舍非常重要。
使用更高采样率录制的分析会产生更细粒度的 CPU 分析,其中包含更多样本。这可能会影响应用程序的性能,因为 VM 被更频繁地中断以收集样本。这还会导致 VM 的 CPU 样本缓冲区更快地溢出。VM 具有有限的空间来存储 CPU 样本信息。在更高的采样率下,空间会更快填满并开始溢出,而不是使用较低的采样率时。这意味着您可能无法访问录制分析开始时的 CPU 样本,具体取决于缓冲区是否在录制期间溢出。
使用较低采样率录制的分析会产生更粗粒度的 CPU 分析,其中包含较少的样本。这会对应用程序的性能造成较小的影响,但您可能无法获得有关 CPU 在分析期间执行的操作的更多信息。VM 的样本缓冲区也填充得更慢,因此您可以查看更长时间的应用程序运行时间的 CPU 样本。这意味着您更有可能查看录制分析开始时的 CPU 样本。
过滤
#查看 CPU 分析时,您可以按库、方法名称或UserTag
过滤数据。
指南
#查看调用树或自下而上视图时,有时树的深度会非常大。为了帮助查看深层树中的父子关系,请启用显示指南选项。这会在树中的父子之间添加垂直指南。
其他资源
#要了解如何使用 DevTools 分析计算密集型 Mandelbrot 应用程序的 CPU 使用情况,请查看一个指导性的CPU 分析器视图教程。此外,了解当应用程序使用隔离区进行并行计算时如何分析 CPU 使用情况。
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-04-09。 查看源代码 或 报告问题.