Java JMX RMI-内存泄漏-ArrayNotificationBuffer随时间变大

Java JMX RMI-内存泄漏-ArrayNotificationBuffer随时间变大,java,memory-leaks,rmi,jmx,Java,Memory Leaks,Rmi,Jmx,我正在编写一个应用程序,它应该可以运行很多小时(10-100),我正在使用JMX监控它 然而,过了一段时间,我发现了两件事: com.sun.jmx.remote.internal.ArrayNotificationBuffer#1变得更大:20小时后,它大约是10MB—当我启动它时,它小于1MB 越来越多的线程,如RMI-TCP-Accept-0(或任何其他数字)和RMI-TCP-Connection(44)-[IP],会随时间实例化 我在想,这与应用程序的不同连接有关,但目前我只连接了一

我正在编写一个应用程序,它应该可以运行很多小时(10-100),我正在使用JMX监控它

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

  • com.sun.jmx.remote.internal.ArrayNotificationBuffer#1
    变得更大:20小时后,它大约是10MB—当我启动它时,它小于1MB
  • 越来越多的线程,如
    RMI-TCP-Accept-0
    (或任何其他数字)和
    RMI-TCP-Connection(44)-[IP]
    ,会随时间实例化
我在想,这与应用程序的不同连接有关,但目前我只连接了一次,但有些连接似乎仍然是开放的


这怎么可能?如何修复此问题?

我在查找的源代码注释中发现了大量的JMX跟踪日志记录,因此您可能希望更好地了解发生了什么

你可能会发现这正影响着你。bug报告表明在长时间连接上观察到问题。这里提到了一些解决方法,不过如果对您来说可行的话,更简单的方法是定期断开和重新连接。好消息是,在Java7中似乎有一个解决方案,尽管我不确定它是否已经发布


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

我不会使用RMI+JMX长时间监视应用程序。它会产生相当多的垃圾。我会使用一个简单的日志文件和/或套接字来发布您需要的信息。为什么要重新发明轮子?我想要内存和CPU使用统计数据。我不明白为什么我应该完全由我自己来写。你不需要重新发明轮子,除非它总是压在你身上