netty API中的内存泄漏

时间:2014-04-24 06:50:31

标签: java netty

我是netty API的新手 我正在使用netty3.5.2开发客户端和服务器通信服务器, 但该应用程序始终运行完整的GC, 我使用jmap来转储内存和 使用jhat来显示哪个对象占用了内存 还有6413363个DefaultChannelFuture个实例。 有人可以告诉哪个线程创建DefaultChannelFuture个实例 以及他们将如何以及何时被释放?

怀疑的前4个案件 6413363类org.jboss.netty.channel.DefaultChannelFuture的实例
班级org.jboss.netty.util.internal.LinkedTransferQueue$Node的631971个实例
630934个班级org.jboss.netty.buffer.BigEndianHeapChannelBuffer的实例 类org.jboss.netty.channel.DownStreamMessageEvent

的630767个实例

2 个答案:

答案 0 :(得分:0)

您可以快速生成消息。它使消息队列过载。

检查工作负荷。

答案 1 :(得分:0)

这个问题现在有点老了,所以不确定你是否找到了答案。我还没有使用它,但Netty in Action书描述了一个检漏仪:

  

Netty包含一个所谓的ResourceLeakDetector,它将对大约1%的缓冲区分配进行采样,以检查应用程序中是否存在泄漏。   如果检测到泄漏,您将看到类似于以下内容的日志消息:

     

泄漏:ByteBuf.release()在被垃圾收集之前没有被调用。启用高级           泄漏报告以找出泄漏发生的位置。启用高级泄漏           报告,指定JVM选项

     

-Dio.netty.leakDetectionLevel=advanced或           呼叫   ResourceLeakDetector.setLevel()