内存泄漏运行Apache Thrift服务器

时间:2014-06-20 10:14:44

标签: java memory-leaks garbage-collection jmx thrift

我正在使用Apache Thrift运行Java服务器并对其进行分析我发现内存(Old Gen)总是在增长,如下图所示:

jconsole

图表末尾的急剧下降是因为我点击了#34;执行GC"。

我知道这里有内存泄漏。所以我运行了一个检漏仪(MAT)并报告如下:

MAT report

  

" com.sun.jmx.remote.internal.ArrayNotificationBuffer"的一个实例   加载""占据7,844,208(77.22%)字节。

我自己从不使用这个类,所以我假设Apache Thrift在内部使用它。我还发现ArrayNotificationBuffer内存泄漏this actually is an old known fixed JDK bug

所以我对此有一些疑问:

  1. 为什么当我点击"执行GC"分配的内存有这么大的下降吗? GC自动运行不一样吗?为什么它不会垃圾收集这个记忆呢?

  2. 我使用OpenJDK(7u55-2.4.7-1ubuntu1~0.12.04.2)和as far as I can see所有与ArrayNotificationBuffer相关的错误已经很老了并修复了,为什么会发生这种情况呢?如何解决?

1 个答案:

答案 0 :(得分:1)

运行GC()时清除分配的事实只是意味着最终会被释放的合法内存块。如果你的堆很大并且其他分配请求没有失败,那么旧的gen可能会推迟一段时间。

至于缓冲区,我会推测JMX通知监听器已经注册,但没有及时处理发出的通知,但很难说。