我们遇到了一个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]
...
可能的原因是什么?
1条答案
按热度按时间qnzebej01#
这是主要的GC日志,它收集整个堆。
3G堆是合理的,但在GC日志中显示约2.3G,因为堆由许多部分组成,不仅包括年轻代和老代,还包括GC热点VM代未收集的perm/virtual。
这个错误是由于堆已满,但GC无法收集任何对象,因此需要更大的堆,或者您可能需要调整堆的大小(这样年轻/老代就有更大的空间)。要验证是否存在任何设置问题,只需使用-Xmx 5G来查看堆是否仍停留在2G(这不应该发生)。