【问题标题】:Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit线程“主”java.lang.OutOfMemoryError 中的异常:请求的数组大小超过 VM 限制
【发布时间】:2017-05-06 17:44:42
【问题描述】:

我们正在尝试在 Jenkins 上构建一个 Maven 项目,每次遇到:

[ERROR] 线程“main”java.lang.OutOfMemoryError 中的异常:请求的数组大小超出 VM 限制

我们试过参数:

-d64 -server -Xmx29G -Xms12G -XX:+UseConcMarkSweepGC -XX:+UseCompressedOops  -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dcom.sun.management.jmxremot

但似乎没有任何帮助。

【问题讨论】:

  • 分配几G内存不太可能解决大多数问题。这听起来像是一个直接的错误。
  • 错误消息表明这是由您自己的代码引起的,这可能是在测试期间或编译期间运行的原因,但基于丢失的日志输出,我只能在这里推测......需要设置 12G 的堆栈大小 (-Xms) 仅对编译和运行测试没有意义...
  • 可能会有所帮助:plumbr.eu/outofmemoryerror/…

标签: java maven jenkins


【解决方案1】:

我建议使用堆转储 + MAT。

  • 添加此标志以在出现内存问题时请求堆转储:

    -XX:+HeapDumpOnOutOfMemoryError

  • 使用这个标志来指定文件的创建位置:

    -XX:HeapDumpPath=/tmp/memory_issue

  • 使用以下工具(MAT)打开并分析文件:

    Memory Analyzer Tool

不要害怕 MAT 的功能,即使输出的一半对你来说没有意义,另一半通常足以追踪到什么东西填满了你的记忆。做得好,这个调查大约需要一个小时,然后你就会有一个 bug 需要修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多