如何在主要垃圾回收后通过 JMX 或代码监控内存
How to monitor memory after major garbage collection via JMX or code
许多监控工具,比如那些非常棒的 JavaMelody,只是监控当前的内存使用情况。如果你想检查内存泄漏或即将发生的内存不足情况,这不是特别有用,如果你有一个应用程序会生成大量垃圾并立即收集。不完美,但恕我直言,更有趣的是在主要垃圾收集后立即监视内存使用情况。如果这个值很高,那么崩溃就在你身边。
因此:您能否在上次主要垃圾回收后立即找出内存使用情况 - 从 Java 代码或通过 JMX?我知道有一些像 VisualVM 这样的工具可以做到这一点(这不是生产使用的选项),它可以写在垃圾收集日志中,但我正在寻找比解析垃圾更直接的解决方案收集日志文件。 :-) 明确一点:我正在寻找可以轻松用于生产中任何应用程序的东西,而不是任何昂贵的调试工具。
以防万一:JDK 7 with -XX:+UseConcMarkSweepGC ,但我也对一般答案感兴趣。
可能 'Dynatrace' 是一个选项...它是一个非常强大的监控工具(不仅用于内存)。
http://www.dynatrace.com/en/index.html
关于 gc 后可用内存的信息(youg 或 old)可通过 JMX 获得。
垃圾收集器 MBean 具有属性 LastGcInfo,它是复合数据对象,包括有关 GC 前后内存池大小的信息。
此外,从Java 7 开始,JMX 通知订阅可用于接收 GC 事件而无需轮询。
您可以找到使用 GC MBean 的代码示例 here。
一种非常粗略的方法是在一段时间内监控 Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()
的最小值。至少这不需要您了解有关内存池的详细信息,如监控 does. This might require you to get notifications about garbage collections.
许多监控工具,比如那些非常棒的 JavaMelody,只是监控当前的内存使用情况。如果你想检查内存泄漏或即将发生的内存不足情况,这不是特别有用,如果你有一个应用程序会生成大量垃圾并立即收集。不完美,但恕我直言,更有趣的是在主要垃圾收集后立即监视内存使用情况。如果这个值很高,那么崩溃就在你身边。
因此:您能否在上次主要垃圾回收后立即找出内存使用情况 - 从 Java 代码或通过 JMX?我知道有一些像 VisualVM 这样的工具可以做到这一点(这不是生产使用的选项),它可以写在垃圾收集日志中,但我正在寻找比解析垃圾更直接的解决方案收集日志文件。 :-) 明确一点:我正在寻找可以轻松用于生产中任何应用程序的东西,而不是任何昂贵的调试工具。
以防万一:JDK 7 with -XX:+UseConcMarkSweepGC ,但我也对一般答案感兴趣。
可能 'Dynatrace' 是一个选项...它是一个非常强大的监控工具(不仅用于内存)。 http://www.dynatrace.com/en/index.html
关于 gc 后可用内存的信息(youg 或 old)可通过 JMX 获得。
垃圾收集器 MBean 具有属性 LastGcInfo,它是复合数据对象,包括有关 GC 前后内存池大小的信息。
此外,从Java 7 开始,JMX 通知订阅可用于接收 GC 事件而无需轮询。
您可以找到使用 GC MBean 的代码示例 here。
一种非常粗略的方法是在一段时间内监控 Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()
的最小值。至少这不需要您了解有关内存池的详细信息,如监控