【问题标题】:ClosedChannelException observered with netty 3.2.7 and 3.3.1 under load在负载下使用 netty 3.2.7 和 3.3.1 观察到 ClosedChannelException
【发布时间】:2012-09-15 15:35:00
【问题描述】:

当我的 netty 服务器未加载时,一切正常。 但是在负载下它开始失败。 目前我正在使用所有默认设置(没有设置任何选项)。请建议我是否需要设置任何选项来处理 2k+ 并发连接(在加载期间可能会非常频繁地关闭和打开)

这是 netty 3.2.7 的堆栈跟踪。我升级到了 netty 3.3.1 ,还是失败了。

2012-09-19 16:17:54,864 新 I/O 服务器工作者 #1-11 调试 org.jboss.netty.handler.ssl.SslHandler 42 吞入异常 写入非应用数据时引发 java.nio.channels.ClosedChannelException: null at org.jboss.netty.channel.socket.nio.NioWorker.cleanUpWriteBuffer(NioWorker.java:645) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.NioWorker.writeFromUserCode(NioWorker.java:372) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:137) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:76) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.Channels.write(Channels.java:632) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.Channels.write(Channels.java:593) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.handler.ssl.SslHandler.wrapNonAppData(SslHandler.java:831) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:915) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.handler.ssl.SslHandler.wrapNonAppData(SslHandler.java:849) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:915) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:620) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:282) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282) ~[netty-3.2.7.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202) ~[netty-3.2.7.Final.jar:na] 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知来源) [na:1.6.0_26] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) [na:1.6.0_26] 在 java.lang.Thread.run(Unknown Source) [na:1.6.0_26]

【问题讨论】:

    标签: java ssl netty nio


    【解决方案1】:

    我认为这个问题可能是由netty中的一个错误引起的。我已经创建了一个可复现的测试用例here,这个bug现在已经修复在netty的3 branch上。

    【讨论】:

      【解决方案2】:

      ClosedChannelException 表示您继续使用自己关闭的频道。请注意,它并不指受对等方影响的连接状态:即,它并不暗示对等方已关闭连接。您已关闭此频道。

      【讨论】:

      • 为什么它只在负载条件下出现?我只在关机时关闭连接。否则连接被客户端关闭。我需要做任何优化吗?
      • @Yok 我不知道你为什么要关闭频道然后继续使用它。只有你知道。可能您遇到了 Netty 错误。
      • 正如我在之前的评论中所说,我不会从服务器端关闭频道。可能是 Netty Bug 或在负载条件下处理通道所需的一些优化。我正在寻找这些优化:(。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 2017-05-23
      相关资源
      最近更新 更多