【发布时间】:2017-09-07 14:16:54
【问题描述】:
使用 VisualVM 并检查 Tomcat 8.5 catalina.out 日志我每次都看到 几乎(7 出11 次左右)当 full GC 发生时,日志显示 OutOfMemory(在同一分钟)。
使用与内存管理有关的 Tomcat 参数:-Xms3G -Xmx=6G -XX:+UseG1GC -XX:+UseStringDeduplication -XX :MaxHeapFreeRatio=100
起初我以为是因为默认的 -XX:MaxHeapFreeRatio 值是 70,因为我看到了最大值。在 full GC 期间,堆大小(当然还有已用堆)会显着下降 - ~10-20%。但是添加 XX:MaxHeapFreeRatio=100 并没有解决问题。
虽然这是内存使用图,不同组JVM参数(无法获得具有旧 JVM 参数的 ATM)在完全 GC 内存使用率快速增长后,它在某种程度上是相似的,最大相同。堆大小和最大值。堆大小不会下降。
您知道为什么会发生这种情况吗?
更新:我忘了提到之前的 full GC 和 OutOfMemory当堆大小甚至未满 - ~5GB 时会发生。那时我没有一次看到堆达到 6GB。
【问题讨论】:
-
你应该调整那些 JVM GC 参数:blog.sokolenko.me/2014/11/javavm-options-production.html
-
在问这样的问题之前,做一些分析,例如你可以使用 YourKit。在您的情况下,这可能是由于 GC 无法跟上在短时间内创建和释放的太多对象。
标签: java tomcat garbage-collection out-of-memory