JVM Tenured/Old Gen 达到限制和服务器挂起
我们的应用程序需要非常大的内存,因为它处理非常大的数据。因此,我们将最大堆大小增加到12GB(-Xmx)。
以下是环境详细信息
OS - Linux 2.6.18-164.11.1.el5
JBoss - 5.0.0.GA
VM Version - 16.0-b13 Sun JVM
JDK - 1.6.0_18
我们在 QA 和 prod 中具有上述 env 和配置。在QA中,我们将最大PS Old Gen(堆内存)配置为8.67GB,而在Prod中,它只有8GB。
在Prod中,对于特定工作,Old Gen Heap达到8GB,挂在那里并且Web URL变得无法访问。服务器正在关闭。但是在QA中,它也达到了8.67GB,但是执行了完整的GC,并返回到6.5GB或更多。在这里,它不会被绞死。
我们无法为此找到解决方案,因为两个盒子上的环境和配置都是相同的。
我在这里有3个问题,
最大堆的 2/3 将分配给旧代/终身制。如果是这样的话,为什么它在一个地方是8GB,而在另一个地方是8.67GB?
在这种情况下,如何提供新旧和任期的有效比率(12GB)?
为什么它在一个地方是完整的GCed,而不是在另一个地方?
任何帮助都是非常可观的。谢谢。
如果您需要有关环境或conf的更多详细信息,请告诉我。