首页 文章

分析火花 Actuator 内存转储{几天后纱线容器运行内存}

提问于
浏览
1

我正在研究spark 1.3,我的应用程序是一个火花流应用程序 . 我用纱线作为资源经理 . 我的应用程序运行良好几天,然后定期激活作业丢失执行程序 . 当我查看node_manager日志时,我发现了一个异常:

containerId XXXX is running beyond physical memory limits. Current usage: 11.1 GB of 11 GB physical memory used; 13.4 GB of 23.1 GB virtual memory used. Killing container.

我对这个例外的问题如下:

  • 我明白11G会记住执行者正在运行 . 但我在spark-defaults.conf中将10G设置为执行程序内存 . 那么如何将11G分配给执行者以及这里提到的虚拟内存是什么?

  • 当容器内存不足时,是否有任何工具或方法可以在堆上和堆内存转储中看到,或者是否有一种方法可以远程连接到容器JVM并查看哪些对象是causig内存泄漏 .

谢谢

1 回答

  • 0
    • 您忘了 spark.yarn.executor.memoryOverhead 属性:

    spark.yarn.executor.memoryOverhead executorMemory * 0.10,最小值为384每个执行程序要分配的堆外内存量(以兆字节为单位) . 这是一个内存,可以解决诸如VM开销,实习字符串,其他本机开销等问题 . 这往往会随着执行程序的大小而增加(通常为6-10%) .

    在你的情况下,它大约是1G .

    • 您可以为OOM使用常见的java属性: -XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=.. . 只需通过 spark.executor.extraJavaOptions 添加这些属性即可 .

相关问题