【问题标题】: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

【问题讨论】:

  • 连接完成后要关闭频道吗?
  • 没有。在服务器进程关闭之前,连接不会关闭。
  • 而且我说的客户端也是一个服务器进程,只是表示连接由这个服务器启动,这个服务器进程只有一个实例。所以两边的总连接数是两个。

标签: netty


【解决方案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 后,问题就消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多