Jboss java.lang.OutOfMemoryError:java堆空间

Jboss java.lang.OutOfMemoryError:java堆空间,java,jboss,heap-memory,Java,Jboss,Heap Memory,jboss serwer不时抛出“发生未处理的异常: java.lang.OutOfMemoryError:java堆空间” 你能给我解释一下它是怎么工作的吗 一些信息: Jboss在Windows上一直以独立模式运行。 从standalone.conf“JAVA_OPTS=-Xms1G-Xmx1G-XX:MaxPermSize=256M” 我部署了~50MB war文件,测试后将其删除 这个Java堆空间异常的可能原因是什么? 我应该在以下部署之间重新启动服务器吗? 是否有清理堆空间的命令?

jboss serwer不时抛出“发生未处理的异常:

java.lang.OutOfMemoryError:java堆空间”

你能给我解释一下它是怎么工作的吗

一些信息: Jboss在Windows上一直以独立模式运行。 从
standalone.conf“JAVA_OPTS=-Xms1G-Xmx1G-XX:MaxPermSize=256M”
我部署了~50MB war文件,测试后将其删除

这个Java堆空间异常的可能原因是什么? 我应该在以下部署之间重新启动服务器吗? 是否有清理堆空间的命令? 如果我理解正确,增加
-Xmx
参数将没有帮助。它只会延迟异常的出现。对吧?


提前感谢

请增加MaxPermSize变量并检查它是否有效

JAVA_OPTS=-Xms1G-Xmx1G-XX:MaxPermSize=512M

这个Java堆空间异常的可能原因是什么

从表面上看,解释很简单。JVM已耗尽堆空间,GC无法回收足够的空间继续

但是是什么导致JVM进入这种状态呢

有许多可能的解释,但它们主要分为三类:

  • 您的应用程序存在内存泄漏

  • 重复部署会导致内存泄漏

  • 没有内存泄漏,但有时您的应用程序会收到一个需要太多内存的请求

  • 我应该在以下部署之间重新启动服务器吗

    如果展开导致泄漏,这可能会有所帮助。如果没有,就不会

    是否有清理堆空间的命令

    没有可以执行此操作的命令。JVM在抛出OOME之前已经运行了“完整”GC

    如果我正确理解的话,增加-Xmx参数将没有帮助。它只会延迟异常的出现。对吧?

    那要看情况。如果根本原因是上面的#3,那么增加堆大小可以解决问题。但如果根本原因是#1或#2,那么调整堆大小(最多)将导致JVM在崩溃之间存活更长时间


    我的建议是首先将其视为“正常”(原因1)内存泄漏,并使用内存探查器来识别和修复可能随着时间的推移而产生的泄漏


    如果你能明确地排除原因1,考虑其他问题。

    < P>我完全同意答案,我只想给你展示一个可能的方法,你可以如何分析它。 监视内存的最小工具是
    jstat
    ,它与
    JDK
    一起提供。 在启动JBoss之后,您可以使用

    jstat-gc2s

    然后可以将输出加载到excel中

    现在,当您发现内存中发生了一些奇怪的情况时,请执行堆转储:

    jcmd GC.heap\u dump

    jcmd
    还附带了
    JDK

    您可以将堆转储加载到中并对其进行分析。使用MAT需要一些练习和耐心。他们也有很好的合作关系。您还可以比较MAT中的堆转储


    我还建议您添加
    XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=“
    到您的JAVA选项。

    您的代码中可能存在内存泄漏。增大尺寸只会延迟OOM。。。试着使用一些探查器工具,看看是什么在消耗你的内存,而不是释放回内存。我不认为这是内存泄漏。重启serwer后,一切正常。一段时间后,完全不同的构建再次发生异常。更重要的是,当我启动jboss serwer时,它会消耗大约560MB的内存(来自任务管理器),而这个Java进程占用的内存超过1。5GB@TomekKoźlak重启后相同应用程序的不同版本并不表示没有内存泄漏。i、 它仍然可能是内存泄漏。此链接可能有用:它可能是内存泄漏,也可能不是内存泄漏。应用程序在做什么?它是否缓存了大量数据?是分配大型对象吗?有多少它分配了很多小对象吗?对象在newgen集合中存活多久?您使用的是什么Java发行版?您使用32位还是64位?请看一看:“我不认为这是内存泄漏。”-您描述的症状与内存泄漏并不矛盾。我假设此解决方案不会有帮助,因为serwer启动时日志开头会出现此警告:Java HotSpot(TM)64位服务器VM警告:忽略选项MaxPermSize=256M;支持已在8.0中删除。您可以尝试此方法来解决此问题。在JBoss EAP 6.4中,右键单击服务器并打开VM参数下的启动配置,您将找到{-Dprogram.name=JBossTools:JBoss EAP“-server-Xms1024m-Xmx1024m-XX:MaxPermSize=256m}将其更新为{-Dprogram.name=JBossTools:JBoss 6.4“-server-Xms512m-Xmx512m}这将解决您的问题。参考:今天我看到了另一个例外:“java.lang.OutOfMemoryError:超出了GC开销限制”,这基本上是相同的问题。