首先,感谢伟大图书馆的所有Netty贡献者.我已经愉快地使用了几个星期.
最近,我开始加载测试我的系统,但现在我遇到了Netty的一些可扩展性问题.我试图尽可能多地同时使用Netty客户端连接到Netty服务器.对于少量客户端(<50),系统工作正常.但是,对于大量客户端(> 100),我发现客户端总是提示"ClosedChannelException":
java.nio.channels.ClosedChannelException在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ 1.operationComplete(NioClientSocketPipelineSink.java:157)在org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:381)在在org.jboss.netty.channel.AbstractChannel $ ChannelCloseFuture org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:367)在org.jboss.netty.channel.DefaultChannelFuture.setSuccess(DefaultChannelFuture.java:316) .setClosed(AbstractChannel.java:351)在org.jboss.netty.channel.AbstractChannel.setClosed(AbstractChannel.java:188)在org.jboss.netty.channel.socket.nio.NioSocketChannel.setClosed(NioSocketChannel.java:146 )在org.jboss.netty.channel.socket.nio.NioWorker.close(NioWorker.java:592)在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.close(NioClientSocketPipelineSink.java:415)在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.processConnectTimeout(NioCl ientSocketPipelineSink.java:379)在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.run(NioClientSocketPipelineSink.java:299)在org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)在在java.util.concurrent.ThreadPoolExecutor中的$工人org.jboss.netty.util.internal.DeadLockProofWorker $ 1.run(DeadLockProofWorker.java:44)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110).在java.lang.Thread.run上运行(ThreadPoolExecutor.java:603)(Thread.java:722)
我想知道如何让Netty支持更多的同步客户端连接,例如10K.我使用的是最新版本的Netty.以下是测试场景:
每个客户端向服务器发送一个四字母字符串,服务器处理程序在收到字符串后不执行任何操作.每个服务器和客户端都运行在具有八核和16GB内存的高性能计算机上.这两台机器通过技嘉网络连接.
你有什么提示吗?
1)您可以在客户端引导程序中调整connectTimeout以确保没有网络/服务器问题
clientBootStrap.setOption("connectTimeoutMillis", optimumTimout);
2)通过在Netty服务器中设置积压值,可以增加传入连接大小的队列,这样客户端就有更好的机会连接到服务器
serverBootStrap.setOption("backlog", 1000);
3)您已经说过,您的应用程序同时创建了许多连接,如果应用程序连接速度太快,Client Boss线程可能会落后.
Netty 3.2.7 Final允许在NioClientSocketChannelFactory构造函数中设置多个Client Boss线程以避免此问题.