排查批量作业缓慢或卡住的问题

本页面介绍如何排查 Dataflow 批处理作业缓慢或卡住的常见原因。

如果批量作业运行缓慢或卡住,请使用执行详细信息标签页查找有关作业的更多信息,并找出导致瓶颈的阶段或工作器。

识别根本原因

  1. 检查作业在工作器启动期间是否遇到问题。如需了解详情,请参阅同步 Pod 时出错

    如需验证作业是否已开始处理数据,请在 job-message 日志中查找以下日志条目:

    All workers have finished the startup processes and began to receive work requests
    
  2. 如需比较不同作业之间的作业性能,请确保输入数据量、工作器配置、自动扩缩行为和 Dataflow Shuffle 设置相同。

  3. 检查 job-message 日志中是否存在配额限制、缺货问题或 IP 地址用尽等问题。

  4. 执行详细信息标签页中,比较阶段进度,以识别耗时较长的阶段。

  5. 查找作业中的任何 Straggler。如需了解详情,请参阅排查批量作业中的 Straggler 问题

  6. 检查吞吐量、CPU 和内存利用率指标。

  7. 检查工作器日志中是否存在警告和错误。

    • 如果工作器日志包含错误,请查看堆栈轨迹。调查该错误是否是由代码中的 bug 导致的。
    • 查找 Dataflow 错误。请参阅排查 Dataflow 错误
    • 查找内存不足错误,这可能会导致流水线卡住。如果您看到内存不足错误,请按照排查 Dataflow 内存不足错误中的步骤操作。
    • 如需识别缓慢或卡住的步骤,请检查工作器日志中是否存在 Operation ongoing 消息。查看堆栈轨迹,了解步骤花费时间的位置。如需了解详情,请参阅处理卡住或操作正在进行
  8. 检查热键

  9. 如果您未使用 Dataflow Shuffle,请检查Shuffler 日志中是否存在 shuffle 操作期间的警告和错误。如果您在端口 12345 或 12346 上看到 RPC 超时错误,则您的作业可能缺少防火墙规则。请参阅 Dataflow 的防火墙规则

  10. 如果启用了 Runner v2,请检查自动化测试框架日志中是否存在错误。如需了解详情,请参阅 Runner v2 问题排查

识别 Straggler

Straggler 是一种工作项,与阶段中的其他工作项相比速度较慢。如需了解如何识别和修复 Straggler,请参阅排查批处理作业中的 Straggler 问题

识别缓慢或卡住的阶段

如需识别缓慢或卡住的阶段,请使用阶段进度视图。 较长的柱形表示阶段需要较多时间。使用此视图可以识别流水线中最慢的阶段。

找到瓶颈阶段后,您可以执行以下步骤:

  • 识别该阶段中的滞后工作器
  • 如果没有滞后工作器,请使用阶段信息面板识别最慢的步骤。使用此信息识别用户代码优化的候选对象。
  • 如需找出并行性瓶颈,请使用 Dataflow 监控指标

识别滞后的工作器

如需识别特定阶段的滞后工作器,请使用工作器进度视图。此视图会显示所有工作器是否会一直处理工作,直到阶段结束或者单个工作器卡在延迟任务上。如果您发现滞后的工作器,请执行以下步骤:

用于调试的工具

如果流水线运行缓慢或卡住,以下工具可帮助您诊断问题。

  • 如需关联突发事件并识别瓶颈,请使用 Cloud Monitoring for Dataflow
  • 如需监控流水线性能,请使用 Cloud Profiler
  • 某些转换比其他转换更适合用于高容量流水线。日志消息可以识别批处理或流式处理流水线中卡住的用户转换
  • 如需详细了解卡住的作业,请使用 Dataflow 作业指标。以下列表包含有用的指标:
    • 积压字节数指标 (backlog_bytes) 按阶段衡量未得到处理的输入量(以字节为单位)。使用此指标查找无吞吐量的组合步骤。 类似地,积压元素指标 (backlog_elements) 用于衡量一个阶段中未得到处理的输入元素数量。
    • 处理并行键 (processing_parallelism_keys) 指标用于衡量流水线特定阶段在过去 5 分钟内的并行处理键数。使用此指标可通过以下方式进行调查:
      • 将问题范围缩小到特定阶段,并确认热键警告,例如 A hot key ... was detected
      • 找出由并行性不足引起的吞吐量瓶颈。 这些瓶颈可能会导致流水线运行缓慢或卡住。
    • 系统延迟时间指标 (system_lag) 和每个阶段的系统延迟时间指标 (per_stage_system_lag) 用于衡量某个数据项已处理或等待处理的最长时间。使用这些指标来识别数据源中效率低下的阶段和瓶颈。

如需了解 Dataflow 监控网页界面中未包含的其他指标,请参阅 Google Cloud 指标中 Dataflow 指标的完整列表。