Apache spark 正在分析spark executor内存转储{几天后容器内存耗尽}

Apache spark 正在分析spark executor内存转储{几天后容器内存耗尽},apache-spark,memory-management,memory-leaks,jvm,spark-streaming,Apache Spark,Memory Management,Memory Leaks,Jvm,Spark Streaming,我正在开发spark 1.3,我的应用程序是spark流媒体应用程序。我使用纱线作为资源管理器。我的应用程序运行了几天,然后spark job定期丢失executor。当我查看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 virtu

我正在开发spark 1.3,我的应用程序是spark流媒体应用程序。我使用纱线作为资源管理器。我的应用程序运行了几天,然后spark job定期丢失executor。当我查看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是如何分配给executor的,这里提到的虚拟内存是什么

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

  • 谢谢

  • 您忘记了spark.Thread.executor.memoryOverhead属性:
  • 火花、纱线、执行器、记忆头

    executorMemory*0.10,最小为384堆外容量 每个执行器分配的内存(兆字节)。这是记忆 这就解释了虚拟机开销、内部字符串等问题 本机开销等。这往往会随着执行器的大小而增加 (通常为6-10%)

    在你的情况下,它大约是1克额外


  • 您可以为OOM使用公共java属性:
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=..
    。只需通过
    spark.executor.extraJavaOptions
    添加这些属性即可
  • 您忘记了spark.Thread.executor.memoryOverhead属性:
  • 火花、纱线、执行器、记忆头

    executorMemory*0.10,最小为384堆外容量 每个执行器分配的内存(兆字节)。这是记忆 这就解释了虚拟机开销、内部字符串等问题 本机开销等。这往往会随着执行器的大小而增加 (通常为6-10%)

    在你的情况下,它大约是1克额外


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

  • -XX:+HeapDumpOnOutOfMemoryError会有所帮助,但是,默认情况下,转储会保存到任务的当前工作目录中,在Hadoop的情况下,该目录是由框架管理的临时临时暂存空间,一旦任务完成,它将变得不可访问。您将如何解决此问题?
    HeapDumpPath
    参数将允许指定一个更永久的位置。-XX:+HeapDumpOnOutOfMemoryError会有所帮助,但是,默认情况下转储会保存到任务的当前工作目录,在Hadoop的例子中,这是一个由框架管理的临时暂存空间,一旦任务完成,它将变得不可访问。您将如何解决此问题?
    HeapDumpPath
    参数将允许指定更永久的位置。