分析spark执行器内存转储{几天后纱线容器运行内存}

时间:2016-12-28 13:53:04

标签: apache-spark memory-management memory-leaks jvm spark-streaming

我正在研究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.

我对此例外的疑问如下:

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

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

  3. 感谢

1 个答案:

答案 0 :(得分:0)

  1. 您忘记了spark.yarn.executor.memoryOverhead财产:
  2.   

    spark.yarn.executor.memoryOverhead

         

    executorMemory * 0.10,最小值为384堆外量   每个执行程序分配的内存(以兆字节为单位)。这是记忆   这可以解释VM开销,实习字符串等问题   本机开销等。这往往会随着执行程序的大小而增长   (通常为6-10%)。

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

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