使用 Cloud Profiler 分析 Dataflow 流水线

Cloud Profiler 是一个低开销的统计性能剖析器,可从生产应用中持续收集有关 CPU 使用情况和内存分配情况的信息。Dataflow 与 Cloud Profiler 的集成可帮助您识别流水线代码中资源耗用量最大的部分。

准备工作

了解 Cloud Profiler 的概念,并自行熟悉性能分析器界面

当您首次访问性能分析器页面时,系统会自动为您的项目启用 Cloud Profiler API。确保您的项目有足够的配额

为 Dataflow 流水线启用 Cloud Profiler

Cloud Profiler 可用于使用 Java 版和 Python 版 Apache Beam SDK 2.33.0 或更高版本编写的 Dataflow 流水线。可以在流水线的开始时间启用它。您的流水线分摊的 CPU 和内存开销预计小于 1%。

Java

如需启用 CPU 分析,请使用选项 --dataflowServiceOptions=enable_google_cloud_profiler 启动流水线。

如需启用堆分析,请使用选项 --dataflowServiceOptions=enable_google_cloud_profiler--dataflowServiceOptions=enable_google_cloud_heap_sampling 启动流水线。堆分析需要使用 Java 11 或更高版本。

Python

您的 Python 流水线必须与 Dataflow Runner v2 一起运行,才能使用 Cloud Profiler。

如需启用 CPU 分析,请使用选项 --dataflow_service_options=enable_google_cloud_profiler 启动流水线。 Python 尚不支持堆分析。

如果您通过 Dataflow 模板部署流水线,则可以通过将 enable_google_cloud_profilerenable_google_cloud_heap_sampling 标志指定为额外的实验来启用 Cloud Profiler。

控制台

如果您使用 Google 提供的模板,则可以在 Dataflow 基于模板创建作业页面的额外实验 字段中指定这些标志。

gcloud

如果您使用 gcloud 命令行工具运行模板,请使用 gcloud dataflow jobs rungcloud dataflow flex-template run(具体取决于模板类型),您可以通过 --additional-experiments 选项指定标志。

API

如果您使用 REST API 运行模板,则可以通过运行时环境中的 additionalExperiments 字段指定标志,可以是 RuntimeEnvironmentFlexTemplateRuntimeEnvironment,具体取决于模板类型。

查看性能分析数据

如果启用了 Cloud Profiler,则作业页面上将显示指向 Profiler 页面的链接。

Profiler 页面链接

您还可以访问 Profiler 页面,查找 Dataflow 流水线的性能分析数据,其中服务是您的作业名称,版本是您的作业 ID。

Profiler 页面

问题排查

一些常见的原因可能会导致您的流水线无法生成性能分析数据,即使您启用了 Cloud Profiler 也是如此。

  • 您的流水线使用的是较旧的 Apache Beam SDK 版本。您可以通过作业页面查看流水线的 Apache Beam SDK 版本。您需要 2.33.0 版或更高版本才能使用 Cloud Profiler。如果您的作业是通过 Dataflow 模板创建的,请确保模板使用的是受支持的 SDK 版本。

  • 您的项目即将用尽 Cloud Profiler 配额。您可以在项目的配额页面中查看配额用量。如果已用尽配额,Cloud Profiler 服务将拒绝性能分析数据。

Cloud Profiler 代理在 Dataflow 工作器启动过程中安装。Cloud Profiler 生成的日志消息可在 dataflow.googleapis.com/worker-startup 类型的日志中获得。

Profiler 日志