我有两个服务器进程,它们与两个套接字连接进行通信。两个连接都只是单向发送消息。(一个用于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
答案 0 :(得分:3)
这是因为Netty Oio impl中的一个错误。该错误是作为3.5.4.Final的一部分修复的。所以请升级到3.5.4.Final或3.5.5.Final。
见[1]。
答案 1 :(得分:0)
这是一个很好的机会,这是一个netty的错误。在我将OioServerSocketChannelFactory / OioClientSocketChannelFactory更改为NioServerSocketChannelFactory / NioClientSocketChannelFactory之后,问题就消失了。