【问题标题】:JMX RMI - Memory Leak - ArrayNotificationBuffer getting bigger over timeJMX RMI - 内存泄漏 - ArrayNotificationBuffer 随着时间的推移变得越来越大
【发布时间】:2012-08-09 12:47:09
【问题描述】:

我正在编写一个应该运行多个小时 (10-100) 的应用程序,我正在使用 JMX 进行监控。

然而,一段时间后,我发现了两件事:

  • com.sun.jmx.remote.internal.ArrayNotificationBuffer#1 变大:20 小时后,大约 10MB - 当我启动它时,它小于 1MB
  • 随着时间的推移会实例化更多线程,例如 RMI TCP Accept-0(或任何其他数字)和 RMI-TCP-Connection(44)-[IP]

我在想,这与应用程序的不同连接有关,但目前我只连接了一次,但某些连接似乎仍处于打开状态。

怎么可能?我该如何解决这个问题?

【问题讨论】:

  • 我不会长时间使用 RMI + JMX 来监控应用程序。它可以产生相当多的垃圾。我会使用一个简单的日志文件和/或套接字,它只发布您需要的信息。
  • 为什么要重新发明轮子?我想要内存和 CPU 使用情况统计信息。我不明白为什么我应该完全自己写它
  • 你不需要重新发明轮子,除非它总是对你不利。 ;)

标签: java memory-leaks rmi jmx


【解决方案1】:

我在 ArrayNotificationBuffer 的源代码 cmets 中四处寻找,它有大量的 JMX 跟踪日志记录,所以您可能需要 enable JMX tracing 以更好地了解正在发生的事情。

您可能会发现this known bug 正在影响您。错误报告表明在长期连接中观察到该问题。提到了一些解决方法,尽管如果对您实用的话,一个更简单的解决方法不是,即定期断开连接并重新连接。好消息是在 Java7 中似乎有一个patch,尽管我不确定它是否已经发布了。

如果您要注册 JMX 通知侦听器,我还会确保它们持续且及时地处理通知。不这样做也可能导致此症状。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多