【问题标题】:How to check why job gets killed on Google Dataflow ( possible OOM )如何检查为什么作业在 Google Dataflow 上被杀死(可能的 OOM)
【发布时间】:2018-07-07 16:06:15
【问题描述】:

我有一个简单的任务。我有一堆文件( ~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

如何调试发生了什么?

【问题讨论】:

    标签: java google-cloud-dataflow apache-beam tinkerpop3 janusgraph


    【解决方案1】:

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

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

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

    更新

    基于截止日期超出错误和您共享的信息,我认为您的工作是“随机绑定”的内存耗尽。根据this guide

    考虑以下行动方案之一或组合:

    1. 添加更多工作人员。在运行管道时尝试将 --numWorkers 设置为更高的值。
    2. 为工作人员增加附加磁盘的大小。在运行管道时尝试将 --diskSizeGb 设置为更高的值。
    3. 使用 SSD 支持的永久性磁盘。尝试设置 --workerDiskType="compute.googleapis.com/projects//zones//diskTypes/pd-ssd" 当您运行管道时。

    更新 2

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

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

    请考虑到堆转储支持有一些开销成本并且转储可能非常大。这些标志只能用于调试目的,并且对于生产作业始终禁用。

    DataflowPipelineDebugOptions methods 上查找其他参考资料。

    更新 3

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

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

    【讨论】:

    • 1) 我唯一的错误是: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:
    • 请使用“编辑”来更新 OPt 的全部错误。
    • 我对帖子做了!
    • 实际上,我已经在不同的配置下尝试了所有这 3 种方法。我已将 700GB 设置为 diskSize、所有 SSD 和 20 个工作人员。我什至将逻辑从一个步骤简化为仅打印行的 ID!毕竟,我无法顺利地从 GoogleStorage 读取所有 100GB 数据并将 ID 打印到控制台。我有点失望。
    • 我很高兴听到您解决了问题并且我提供了一些帮助。我做了一些额外的步骤来尽量避免将来出现这个问题。也谢谢你!
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2020-02-25
    相关资源
    最近更新 更多