当前位置: 首页 > 知识库问答 >
问题:

分析火花执行器内存转储{几天后,纱容器内存耗尽}

狄峻熙
2023-03-14

我正在开发 spark 1.3,我的应用程序是一个 spark 流应用程序。我使用纱线作为资源经理。我的应用程序运行正常几天,然后 spark 作业定期丢失执行程序。当我查看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并查看哪些对象导致内存泄漏。

    谢谢

  • 共有1个答案

    宗政坚白
    2023-03-14
    1. 您忘记了<code>spark.yarn.executor。memoryOverhead属性:

    spark.yarn.executor.memoryOverhead

    执行器内存 * 0.10,最小值为 384 每个执行程序要分配的堆外内存量(以兆字节为单位)。这是考虑 VM 开销、内部字符串、其他本机开销等因素的内存。这往往会随着执行程序的大小(通常为 6-10%)而增长。

    在你的情况下,大约是1克。

     类似资料:
    • 我是Spark的初学者,我正在运行我的应用程序,从文本文件中读取14KB的数据,执行一些转换和操作(收集、收集AsMap),并将数据保存到数据库 我在我的macbook上本地运行它,内存为16G,有8个逻辑核。 Java最大堆设置为12G。 这是我用来运行应用程序的命令。 bin/spark-submit-class com . myapp . application-master local[*

    • 您从哪里开始调优上面提到的params。我们是从执行器内存开始,得到执行器的数目,还是从核心开始,得到执行器的数目。我跟踪了链接。然而得到了一个高水平的想法,但仍然不确定如何或从哪里开始并得出最终结论。

    • 我试图分析我的Java applet的堆转储,它耗尽了堆空间,即使我增加堆大小,如本文所示。applet:Java堆空间 今天上午我做了一些堆转储(是的...它可能做数字转储),我试图用MAT和Visual VM1.3.5来分析它们。运行泄漏测试后,主要的怀疑对象是org.eclipse.jdt.internal.core.javaModelManager和org.eclipse.jst.jee.

    • 我正在从我的开发机器上启动spark-submit。 根据在YARN文档上运行Spark,我应该在env var或上为hadoop集群配置提供一个路径。这就是它变得棘手的地方:如果我将任务发送到远程YARN服务,为什么这些文件夹必须存在于我的本地机器上?这是否意味着spark-submit必须位于集群内部,因此我不能远程启动spark任务?如果没有,我应该用什么填充这些文件夹?我应该从任务管理器服

    • 我已经下载了EclipseMat,并尝试在Windows上启动它。 执行显示一个弹出窗口,显示与此消息不兼容的JVM:JVM的1.8.0242版本不适用于此产品。版本:11或更高版本是必需的。 如本文所述,我创建了一个目录,并复制了一个解决问题的OpenJDK 16。 但是我不觉得这个解决方案很优雅。所以我试图在中添加参数,并试图创建一个文件作为文档的引用。它不起作用! 有没有一种方法可以配置JV