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

标签 java memory-leaks garbage-collection monitoring

许多监控工具,例如梦幻般的 JavaMelody ,只需监控当前内存使用情况。如果您想检查内存泄漏或即将出现的内存不足情况,并且您的应用程序会生成大量垃圾并立即收集,那么这并不是特别有用。不完美,但恕我直言,更有趣的是,在主要垃圾收集后立即监视内存使用情况。如果该值很高,则崩溃即将来临。

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

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

最佳答案

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

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

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

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

关于java - 如何通过 JMX 或代码监视主要垃圾回收后的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398555/

相关文章:

java - 如何在java中从键盘输入一些单词

java - 如何正确使用继承,避免向下转型

ruby-on-rails - oink 日志命令不适用于 heroku

c++ - 这可能是误报的内存泄漏报告吗?

go - 分配错误 : runtime: out of memory

java - 解析 android :background ="@android:drawable/alert_dark_frame" 时 Robolectric InflateException

java - 不支持的操作异常 : The application must supply JDBC connections JPA Hibernate Spring JDBC

c++ - 如果我不调用ReleaseStringUTFChars,它会在JNI调用结束时自动调用吗?

java - Activity 是否有可能收集垃圾而不是子 fragment ?

cassandra - cassandra 中的 G1GC 垃圾收集