使用VisualVM并检查Tomcat 8.5 catalina.out日志我几乎每次都看到(11次中有7次左右)当完全GC发生时,日志显示OutOfMemory(在完全相同的时间).
使用与内存管理有关的Tomcat参数:-Xms3G -Xmx = 6G -XX:UseG1GC -XX:UseStringDeduplication -XX:MaxHeapFreeRatio = 100
起初我认为这是因为默认的-XX:MaxHeapFreeRatio值,因为我看到最大值是70.在完整的GC期间,堆大小(当然使用的堆)会显着下降 – 大约10-20%.但是添加XX:MaxHeapFreeRatio = 100并没有解决它.
虽然这是具有不同JVM参数集的内存使用图(无法获得具有旧JVM参数的ATM),但在完全GC内存使用快速增长,同样最大值之后,它在某种程度上类似.堆大小和最大堆大小不会下降.
任何想法为什么会这样?
更新:我忘了提到以前完整的GC和OutOfMemory会在堆大小甚至不满时发生 – 约5GB.当时没有一次我看到堆达到6GB.
最佳答案 显然,创建的某些对象无法正确收集垃圾.您可以尝试使用VisualVM的采样器功能并跟踪创建的实例数.