是啥导致了netty中的这种内存泄漏
Posted
技术标签:
【中文标题】是啥导致了netty中的这种内存泄漏【英文标题】:what is causing this memory leak in netty是什么导致了netty中的这种内存泄漏 【发布时间】:2012-09-02 15:39:56 【问题描述】:我有两个服务器进程,它们通过两个套接字连接进行通信。两个连接都只能单向发送消息。(一个用于 c->s,一个用于 s->c)。
服务端和客户端分别用 OioserverSocketChannelFactory / OioClientSocketChannelFactory 初始化。
经过一些分析,发现这三个类的对象从未释放(在双方)。我不直接使用这些类,我只保留对两个 Channel 对象的引用。
java.util.concurrent.LinkedTransferQueue$Node 1005351 32171232
org.jboss.netty.channel.Channels$2 1005351 24128424
org.jboss.netty.channel.socket.ChannelRunnableWrapper 1005351 48256848
我的代码中泄露了什么样的对象可能导致这些对象无法释放?
更新:环境,jdk7u7,centos6 64bit,netty 3.5.3
【问题讨论】:
连接完成后要关闭频道吗? 没有。在服务器进程关闭之前,连接不会关闭。 而且我说的客户端也是一个服务器进程,只是表示连接由这个服务器启动,这个服务器进程只有一个实例。所以两边的总连接数是两个。 【参考方案1】:这是因为 Netty Oio impl 中的一个错误。该错误已作为 3.5.4.Final 的一部分得到修复。所以请升级到 3.5.4.Final 或 3.5.5.Final。
参见 [1]。
[1]https://github.com/netty/netty/issues/520
【讨论】:
【参考方案2】:这很有可能是 netty 的一个错误。在我将 OioServerSocketChannelFactory / OioClientSocketChannelFactory 更改为 NioServerSocketChannelFactory / NioClientSocketChannelFactory 后,问题就消失了。
【讨论】:
以上是关于是啥导致了netty中的这种内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
由于 Netty 中的 ByteBuffers 导致的内存泄漏