首先,感谢所有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.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:367) 在org.jboss.netty.channel.DefaultChannelFuture.setSuccess(DefaultChannelFuture.java:316) 在org.jboss.netty.channel.AbstractChannel $ ChannelCloseFuture.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(NioClientSocketPipelineSink.java:379) 在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.run(NioClientSocketPipelineSink.java:299) 在org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) 在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) 在java.lang.Thread.run(Thread.java:722)
我想知道如何让Netty支持更多的同步客户端连接,例如10K。我使用的是最新版本的Netty。以下是测试场景:
每个客户端向服务器发送一个四字母字符串,服务器处理程序在收到字符串后不执行任何操作。每个服务器和客户端都运行在具有八核和16GB内存的高性能计算机上。这两台机器通过技嘉网络连接。
你有任何提示吗?
答案 0 :(得分:6)
1)您可以在客户端引导程序中调整connectTimeout以确保没有网络/服务器问题
clientBootStrap.setOption("connectTimeoutMillis", optimumTimout);
2)通过在Netty服务器中设置积压值,可以增加传入连接大小的队列,这样客户端就有更好的机会连接到服务器
serverBootStrap.setOption("backlog", 1000);
3)您已经说过,如果应用程序连接速度太快,您的应用程序会同时创建多个连接,Client Boss线程may lag behind。
Netty 3.2.7 Final允许在NioClientSocketChannelFactory构造函数中设置多个Client Boss线程以避免此问题。