我们的应用程序需要非常大的内存来处理大型数据,因此我们将最大堆大小增加到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和生产环境中具有上述的环境和配置。在QA中,我们分配了最大PS Old Gen (堆内存)为8.67GB,而在生产环境中只有8GB。对于生产环境中的一个特定工作,Old Gen Heap达到8GB后就会停滞不前,Web URL也无法访问,服务器会崩溃。但是在QA中,它也会达到8.67GB,但会执行full GC并返回至6.5GB或其它的值,这里没有出现问题。
我们无法找到解决方法,因为两个环境和两个主机上的配置完全相同。
我在这里有三个问题:
2/3的最大堆将分配给旧/ Tenured gen。如果是这样,为什么一个地方是8GB,另一个地方是8.67GB?
如何为新的和Tenure提供有效的比例(12GB)?
为什么在一个地方进行full GC而在另一个地方没有进行full GC?
任何帮助都将非常感激。谢谢。
请告诉我是否需要有关env或conf的进一步详细信息。