Memory 当eden空间为100%时JVM崩溃

Memory 当eden空间为100%时JVM崩溃,memory,jboss,crash,jvm,Memory,Jboss,Crash,Jvm,我有一个生产系统,带有运行在JDK1.6.0_24、JBoss4.3上的JBoss应用服务器。 服务器偶尔会崩溃,JVM创建的转储文件会产生一致的结果: {Heap before GC invocations=6421 (full 4675): PSYoungGen total 521536K, used 518784K [0xdbc00000, 0xfbc00000, 0xfbc00000) eden space 518784K, 100% used [0xdbc00000,

我有一个生产系统,带有运行在JDK1.6.0_24、JBoss4.3上的JBoss应用服务器。 服务器偶尔会崩溃,JVM创建的转储文件会产生一致的结果:

{Heap before GC invocations=6421 (full 4675):
  PSYoungGen      total 521536K, used 518784K [0xdbc00000, 0xfbc00000, 0xfbc00000)
  eden space 518784K, 100% used [0xdbc00000,0xfb6a0000,0xfb6a0000)
  
  from space 2752K, 0% used [0xfb950000,0xfb950000,0xfbc00000)
  to   space 2752K, 0% used [0xfb6a0000,0xfb6a0000,0xfb950000)
    
 PSOldGen        total 1572864K, used 1572855K [0x7bc00000, 0xdbc00000, 0xdbc00000)
  object space 1572864K, 99% used [0x7bc00000,0xdbbfdeb8,0xdbc00000)
 PSPermGen       total 524288K, used 92683K [0x5bc00000, 0x7bc00000, 0x7bc00000)
  object space 524288K, 17% used [0x5bc00000,0x61682c30,0x7bc00000)
81507.318: [Full GC [PSYoungGen: 518784K->518784K(521536K)] [PSOldGen: 1572855K->1572855K(1572864K)] 2091639K->2091639K(2094400K) [PSPermGen: 92683K->92683K(524288K)], 1.5334976 secs] [Times: user=1.53 sys=0.00, real=1.53 secs] 
Heap after GC invocations=6421 (full 4675):
 PSYoungGen      total 521536K, used 518784K [0xdbc00000, 0xfbc00000, 0xfbc00000)
  eden space 518784K, 100% used [0xdbc00000,0xfb6a0000,0xfb6a0000)
  from space 2752K, 0% used [0xfb950000,0xfb950000,0xfbc00000)
  to   space 2752K, 0% used [0xfb6a0000,0xfb6a0000,0xfb950000)
 PSOldGen        total 1572864K, used 1572855K [0x7bc00000, 0xdbc00000, 0xdbc00000)
  object space 1572864K, 99% used [0x7bc00000,0xdbbfdeb8,0xdbc00000)
 PSPermGen       total 524288K, used 92683K [0x5bc00000, 0x7bc00000, 0x7bc00000)
  object space 524288K, 17% used [0x5bc00000,0x61682c30,0x7bc00000)
}
对于JAVA_选项,我们有:

-服务器

-Xms2048m

-Xmx2048m

-Dsun.rmi.dgc.client.gcInterval=3600000

-Dsun.rmi.dgc.server.gcInterval=3600000

-Dsun.lang.ClassLoader.AllowaraySyntax=true

-XX:NewSize=512m

-XX:MaxNewSize=512m

-XX:PermSize=512m

-XX:MaxPermSize=512m

-详细GC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-XX:+PrintHeapAtGC

-XX:+cms已启用

-XX:-TraceClassLoading

-XX:-TraceClass卸载

所以在我看来2GB已经足够了,而且有更多的内存可以使用,所以应该不会有任何问题


有什么建议吗?

内存不足。您将堆大小设置为2G,年轻一代为500M,老一代为1500M,以填充它可以使用的最大2G(您的幸存者空间是空的,但很低,它们可能太低,无法从伊甸园空间获取任何对象)


您应该尝试增加最大堆大小,如果仍然存在问题,则需要监控内存使用情况,以检查内存使用率已经很高时,是否存在任何泄漏或某些进程请求过多新对象。

增加您的Xmx值。对于eden space对象,OldGen没有任何地方可以溢出大约100%

考虑使用类似于附加到有问题的应用程序的PID并监视JVM内存使用情况的方法。这将有助于确定与JBoss的某些交互是否导致堆崩溃,或者是缓慢的内存泄漏