如何通过JMX或代码在主要垃圾回收后监视内存

时间:2015-09-04 12:51:07

标签: java memory-leaks garbage-collection monitoring

许多监控工具,例如其他幻灯片JavaMelody,只监控当前的内存使用情况。如果您要检查内存泄漏或即将发生内存不足的情况,如果您的应用程序生成大量垃圾并立即收集,则这并非特别有用。不完美,但恕我直言更有趣,是在重大垃圾收集后立即监控内存使用情况。如果那个很高,那么你就会崩溃。

那么:您可以在最后一次主要垃圾收集后立即查找内存使用情况 - 从Java代码还是通过JMX?我知道有一些工具如VisualVM这样做(这不是生产用的选项),它可以写在垃圾收集日志中,但我正在寻找比解析垃圾更简单的解决方案集合日志文件。 :-)要明确:我正在寻找可以在生产中的任何应用程序中轻松使用的东西,而不是任何昂贵的调试工具。

如果重要:带有-XX的JDK 7:+ UseConcMarkSweepGC,但我也对一般答案感兴趣。

3 个答案:

答案 0 :(得分:2)

有关gc(youg或old)之后可用内存的信息可通过JMX获得。

垃圾收集器MBean具有属性LastGcInfo,它是复合数据对象,包括有关GC之前和之后的内存池大小的信息。

此外,从Java 7开始,JMX通知订阅可用于接收GC事件而无需轮询。

您可以找到使用GC MBean here的代码示例。

答案 1 :(得分:0)

可能'Dynatrace'是一个选项......它是一个非常强大的监控工具(不仅仅用于内存)。 http://www.dynatrace.com/en/index.html

答案 2 :(得分:0)

一种非常粗略的方法是监视Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()的最小值一段时间。至少这不需要您了解有关内存池的详细信息,因为监视LastGcInfo in Alexey Ragozin's answer会这样做。这可能需要您get notifications about garbage collections