多年来,我们一直使用
对于使用
具体而言,对于
但基本上,我们想监视它选择在混合循环中执行的最后一次混合集合后的G1堆大小,或类似的东西。
例如,在虚拟机之外,我可以使用一个awk脚本,仅查找最后一个后跟
有没有办法在Java VM内部做到这一点?
+UseParallelOldGC
运行具有适度堆大小的Java服务。现在,我们开始推出一个使用更大堆和G1收集器的新服务。这个进展顺利。对于使用
+UseParallelOldGC
的服务,我们通过查看老一代集合后的大小并在阈值上发出警报来监视内存泄漏。这非常有效,事实上,仅两周前就挽救了我们的困境。具体而言,对于
+UseParallelOldGC
,我们执行以下操作:
ManagementFactory.getMemoryPoolMXBeans()
- 查找名称以“Old Gen”结尾的
MemoryPoolMXBean
结果 - 将
getCollectionUsage().getUsed()
(如果可用)与getMax()
进行比较
getCollectionUsage()
的概念。但基本上,我们想监视它选择在混合循环中执行的最后一次混合集合后的G1堆大小,或类似的东西。
例如,在虚拟机之外,我可以使用一个awk脚本,仅查找最后一个后跟
'(young)'
的'(mixed)'
,并查看最终堆大小(例如,'1540.0M' 'Heap: 3694.5M(9216.0M)->1540.0M(9216.0M)'
)有没有办法在Java VM内部做到这一点?