我正在研究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内存泄漏。< / p>
感谢
答案 0 :(得分:0)
spark.yarn.executor.memoryOverhead
财产:spark.yarn.executor.memoryOverhead
executorMemory * 0.10,最小值为384堆外量 每个执行程序分配的内存(以兆字节为单位)。这是记忆 这可以解释VM开销,实习字符串等问题 本机开销等。这往往会随着执行程序的大小而增长 (通常为6-10%)。
在你的情况下,它还大约是1G。
-XX:+HeapDumpOnOutOfMemoryError
和-XX:HeapDumpPath=..
。只需按spark.executor.extraJavaOptions
添加这些属性。