首页 > 解决方案 > G1GC 的内存使用具有误导性

问题描述

我们将应用程序从 CMS 迁移到 G1GC,并发布堆监控系统正在触发高堆使用警报。最大堆使用量超过总堆的 80%,几乎是我们过去使用 CMS 获得的两倍。内存图呈锯齿形,使用率高低。

通过 GC 日志我们注意到,为了减少 GC 循环的频率,G1GC 将大约 50% 的堆分配给 Eden 空间。Eden 中的大多数对象是临时对象,它们会在下一次 GC 时被清除。由于 G1GC 延迟了 GC 周期,报告的高堆的主要部分由临时对象组成。

监控系统基本捕获Memory_HeapMemoryUsage MBean 来获取内存快照。但是对于 G1GC 的工作方式,这些数据具有误导性。我们可以改变监控系统捕获数据的方式,但它会变成特定于 G1GC 的吗?

有没有更好的方法独立于 GC 实现?

标签: javag1gc

解决方案


推荐阅读