即使以-Xmx 3G启动,JVM堆也会停留在2g

时间:2016-10-13 15:13:35

标签: java jvm heap

我们对java进程有一个奇怪的问题。 它是以-Xmx3G开头的,并且在某些时候它开始抛出:

java.lang.OutOfMemoryError: Java heap space

在抛出错误的时候检查GC日志,堆大小似乎停留在2G?

...
12893.533: [Full GC 2248110K->2248109K(2315776K), 0.4723440 secs]
212894.006: [Full GC 2248110K->2248109K(2315776K), 0.4823290 secs]
212894.490: [Full GC 2248110K->2248110K(2315776K), 0.4642130 secs]
212894.955: [Full GC 2248114K->2248112K(2315776K), 0.4866180 secs]
...

可以解释这个问题的可能原因是什么?

非常感谢, 乔治

1 个答案:

答案 0 :(得分:0)

这是主要的GC日志,它收集完整的堆。

3G堆在GC日志中显示大约2.3G是合理的,因为堆由许多部分组成,不仅是年轻代和旧代,还有perm / virtual,而不是由GC hotspot VM generations收集。

错误是由于堆已满,但GC无法收集任何对象,因此需要更大的堆,或者您可能必须调整堆的大小(因此年轻/老年代有更大的空间)。要验证是否存在任何设置问题,只需使用-Xmx5G查看堆是否仍然停留在2G(这不应该发生)。