首先,感谢Netty的所有贡献者为这个杰出的库做出的贡献。我已经愉快地使用它几周了。
最近,我开始对我的系统进行负载测试,但是现在我正在使用Netty时遇到一些可扩展性问题。我尝试分叉尽可能多的同时Netty客户端连接到一个Netty服务器。对于少量客户端(<50),系统运行良好。然而,对于大量客户端(>100),我发现客户端端总是提示“ClosedChannelException”:
java.nio.channels.ClosedChannelException at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$1.operationComplete(NioClientSocketPipelineSink.java:157) at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:381) at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:367) at org.jboss.netty.channel.DefaultChannelFuture.setSuccess(DefaultChannelFuture.java:316) at org.jboss.netty.channel.AbstractChannel$ChannelCloseFuture.setClosed(AbstractChannel.java:351) at org.jboss.netty.channel.AbstractChannel.setClosed(AbstractChannel.java:188) at org.jboss.netty.channel.socket.nio.NioSocketChannel.setClosed(NioSocketChannel.java:146) at org.jboss.netty.channel.socket.nio.NioWorker.close(NioWorker.java:592) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.close(NioClientSocketPipelineSink.java:415) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processConnectTimeout(NioClientSocketPipelineSink.java:379) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:299) at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
我想知道如何使Netty支持更多的同时客户端连接,例如10K。我正在使用最新版本的Netty。以下是测试场景:
每个客户端向服务器发送一个四字母字符串,服务器处理程序在接收到字符串后不执行任何操作。服务器和客户端都运行在具备8个核心和16GB内存的高性能机器上。两台机器通过千兆网络连接。
你有什么提示吗?