我正在研究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 回答
spark.yarn.executor.memoryOverhead
属性:在你的情况下,它大约是1G .
-XX:+HeapDumpOnOutOfMemoryError
和-XX:HeapDumpPath=..
. 只需通过spark.executor.extraJavaOptions
添加这些属性即可 .