完整GC似乎未执行(内存不足)

时间:2019-02-12 10:23:22

标签: java garbage-collection jvm out-of-memory jvm-hotspot

我使用轮循算法在负载均衡器后面有2个Web服务器(4核/ 16 GB RAM / Cent OS 7)。

应用程序是使用Java using Apache/Tomcat构建的。

服务器,Apache,Tomcat和Webapp具有相同的配置,heap size : -Xms12840m -Xmx12840m

问题是第一台服务器的内存不足。内核由于内存不足而杀死了Java进程。而第二台服务器更稳定。

我试图使用VisualVM和带有jstat的GC来监视和分析堆转储内存。

关于堆转储内存,我没有发现任何内存泄漏,这并不意味着没有。 但是使用VisualJM / Monitor可以观察到,当旧版本已满时,在第二台服务器上完成了Full GC。在第一台服务器上不是这种情况。实际上,尽管负载均衡器使用了轮询算法,但似乎第一台服务器总是比第二台服务器更忙。 因此,在第一台服务器上,JVM似乎没有时间在内存不足之前进行完整的GC操作。

默认情况下,年轻/老一代之间的比例为1:2

如果伊甸园已满,则年轻一代的次要GC就可以了。但是当老一代的增长率接近100%时,就不会出现Full GC。

那么,如何优化GC以避免内存不足? 为什么在服务器1上未完成完整GC? 是因为服务器上的请求高峰,然后JVM无法及时进行完整的GC?

感谢您的帮助。

0 个答案:

没有答案