0

我们的管道是基于 Apache Beam Go SDK 开发的。我正在尝试通过设置标志来分析所有工作人员的 CPU --cpu_profiling=gs://gs_locationhttps ://github.com/apache/beam/blob/master/sdks/go/pkg/beam/runners/dataflow/dataflow.go

这项工作以花费 16.636 个 vCPU 小时和最多 104 个工作人员完成:在此处输入图像描述

结果在指定的 GCS 位置,记录了一堆名为“profprocess_bundle-*”的文件:保存的分析文件

然后我下载了这些文件,将它们全部解压缩,并使用 pprof ( https://github.com/google/pprof ) 可视化结果:在此处输入图像描述

所以这是我的问题:

  1. 分析结果中的总时间是如何收集的?采样时间(1.06 小时)比 Dataflow 报告的 vCPU 时间(16.626 小时)短得多。

  2. 文件名“profprocess_bundle-*”中的数字是多少?我在想它可能对应于工人的指数。但是数量的最大值大于工人数量,并且数量不连续。最大数量为 122,但只有 66 个文件。

4

1 回答 1

1

当您设置 时--cpu_profiling=true,分析在 SDK 工作人员开始处理捆绑包时开始(一批输入元素将通过您的管道 DAG 的子图,有时也称为工作项)并在处理完成时结束。一个作业可以包含许多捆绑包。这就是总 vCPU 时间将大于采样周期的原因。

如前所述, profprocess_bundle-* 中的数字表示正在分析的包 ID。

于 2021-04-13T20:37:59.493 回答