如何检查作业在 Google 数据流上被杀死的原因(可能 OOM)

How to check why job gets killed on Google Dataflow ( possible OOM )

我有一个简单的任务。我有一堆文件 ( ~100GB in total ),每一行代表一个实体。我必须将这个实体发送到 JanusGraph 服务器。

2018-07-07_05_10_46-8497016571919684639 <- job id

过了一会儿,我遇到了 OOM,日志显示 Java 被杀了。

从数据流视图,我可以看到以下日志:

Workflow failed. Causes: S01:TextIO.Read/Read+ParDo(Anonymous)+ParDo(JanusVertexConsumer) failed., A work item was attempted 4 times without success. Each time the worker eventually lost contact with the service. The work item was attempted on:

从 stackdriver 视图,我可以看到:https://www.dropbox.com/s/zvny7qwhl7hbwyw/Screenshot%202018-07-08%2010.05.33.png?dl=0

日志说: E Out of memory: Kill process 1180 (java) score 1100 or sacrifice child E Killed process 1180 (java) total-vm:4838044kB, anon-rss:383132kB, file-rss:0kB 更多信息:https://pastebin.com/raw/MftBwUxs

我如何调试正在发生的事情?

目前调试问题的信息太少,因此我提供有关 Dataflow 的一般信息。

  1. 我找到日志最直观的方法是 Google Cloud Console -> Dataflow -> Select name 感兴趣的 -> 右上角(错误 +日志)。
  2. 描述了有关监视的更多详细信息here(处于测试阶段)。
  3. 描述了对管道进行故障排除的一些基本线索,以及最常见的错误消息here

如果您无法解决问题,请使用错误信息更新 post。

更新

根据超时错误和您分享的信息,我认为您的工作是 "shuffle-bound" 内存耗尽。根据 this guide:

Consider one of, or a combination of, the following courses of action:

  1. Add more workers. Try setting --numWorkers with a higher value when you run your pipeline.
  2. Increase the size of the attached disk for workers. Try setting --diskSizeGb with a higher value when you run your pipeline.
  3. Use an SSD-backed persistent disk. Try setting --workerDiskType="compute.googleapis.com/projects//zones//diskTypes/pd-ssd" when you run your pipeline.

更新 2

对于特定的 OOM 错误,您可以使用:

  • --dumpHeapOnOOM 会导致 JVM 因 OOM 崩溃时将堆转储保存在本地。
  • --saveHeapDumpsToGcsPath=gs://<path_to_a_gcs_bucket> 将导致堆转储在下次 worker 重启时上传到配置的 GCS 路径。这使得下载转储文件以供检查变得容易。确保作业所在的帐户 运行 对存储桶具有写入权限。

请注意,堆转储支持会产生一些开销成本并且转储可能非常大。这些标志应仅用于调试目的,并且始终对生产作业禁用。

DataflowPipelineDebugOptions methods 上查找其他参考文献。

更新 3

我没有找到关于此的 public 文档,但我测试了 Dataflow 使用机器类型 (workerMachineType) 缩放 heap JVM size,这也可以解决您的问题。我在 GCP 支持部门工作,因此我提交了两个文档请求(一个用于描述页面,另一个用于数据流故障排除页面)以更新文档以介绍此信息。

另一方面,this related feature request 可能对您有用。为其添加星标以使其更显眼。