memory - 当 eden 空间为 100% 时,JVM 崩溃

标签 memory jboss crash jvm

我有一个生产系统,其中 JBoss 应用程序服务器在 JDK 1.6.0_24、JBoss 4.3 上运行。 服务器时不时地崩溃,并且由 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_OPTS,我们有:

-server

-Xms2048m

-Xmx2048m

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

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

-Dsun.lang.ClassLoader.allowArraySyntax=true

-XX:NewSize=512m

-XX:MaxNewSize=512m

-XX:PermSize=512m

-XX:MaxPermSize=512m

-verbosegc

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-XX:+PrintHeapAtGC

-XX:+CMSPermGenSweepingEnabled

-XX:-TraceClassLoading

-XX:-TraceClassUnloading

所以在我看来2GB就足够了,而且还有更多的内存可以使用,所以应该没有任何问题。

有什么建议吗?

最佳答案

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

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

关于memory - 当 eden 空间为 100% 时,JVM 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969793/

相关文章:

C++ 段错误 - 核心已转储

node.js - Node v0.5.0 pre Socket.IO 在连接时崩溃(与传输无关)

c# - .Net 应用程序中带有 STATUS_STACK_OVERFLOW 的应用程序崩溃是否意味着堆栈溢出发生在 native 代码中?

objective-c - iOS 11 与 bundleProxy 崩溃!= 使用 UNUserNotificationCenter 时出现 nil 错误

c - 重新分配 : Segmentation fault

linux - 是否可以强制使用一系列虚拟地址?

c++ - VirtualAlloc 失败

java - 使用 getCurrentSession 在 jboss 上部署

java - 非法状态异常 : Cannot obtain inMethodFlag for: getPrimaryKey

linux - 无法获取共享库(.so) -在 Jboss 上测试 .war 文件的正确地址 API 时出现 UnsatisfiedLink 错误(Linux 环境)