即使使用-Xmx 3G启动,JVM堆仍停留在2g

bjp0bcyl  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(159)

我们遇到了一个Java进程的奇怪问题。它是以-Xmx 3G开头的,在某个时候它开始抛出:

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]
...

可能的原因是什么?

qnzebej0

qnzebej01#

这是主要的GC日志,它收集整个堆。
3G堆是合理的,但在GC日志中显示约2.3G,因为堆由许多部分组成,不仅包括年轻代和老代,还包括GC热点VM代未收集的perm/virtual。
这个错误是由于堆已满,但GC无法收集任何对象,因此需要更大的堆,或者您可能需要调整堆的大小(这样年轻/老代就有更大的空间)。要验证是否存在任何设置问题,只需使用-Xmx 5G来查看堆是否仍停留在2G(这不应该发生)。

相关问题