【发布时间】:2016-03-10 21:45:06
【问题描述】:
多年来,我们一直使用+UseParallelOldGC 运行堆大小适中的 Java 服务。现在,我们开始使用更大的堆和 G1 收集器推出一项新服务。进展顺利。
对于我们使用+UseParallelOldGC 的服务,我们通过在收集后查看老年代大小并在阈值上发出警报来监控内存泄漏。这很有效,事实上两周前我们的培根就保存了。
具体来说,对于+UseParallelOldGC,我们执行以下操作:
ManagementFactory.getMemoryPoolMXBeans()- 搜索名称以
"Old Gen"结尾的MemoryPoolMXBean结果 - 比较
getCollectionUsage().getUsed()(如果有)和getMax()
不幸的是,G1 似乎不再有getCollectionUsage() 的概念。
不过,从根本上说,我们希望在它选择在混合循环中进行的最后一次混合收集之后监控 G1 堆大小,或类似的事情。
例如,在 VM 之外,我会很高兴有一个 awk 脚本,它只找到最后一个 '(mixed)' 后面跟着一个 '(young)' 并查看最终堆大小是多少(例如,'1540.0M' 'Heap: 3694.5M(9216.0M)->1540.0M(9216.0M)')
有没有办法在 Java VM 中做到这一点?
【问题讨论】:
-
这应该提供类似的信息:stackoverflow.com/a/32509813/1362755
标签: java garbage-collection g1gc