Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency 如何允许与Netty进行更多并发客户端连接?_Concurrency_Connection_Client_Netty - Fatal编程技术网

Concurrency 如何允许与Netty进行更多并发客户端连接?

Concurrency 如何允许与Netty进行更多并发客户端连接?,concurrency,connection,client,netty,Concurrency,Connection,Client,Netty,首先,感谢所有网络投稿人提供的伟大图书馆。我已经愉快地使用它好几个星期了 最近,我开始对我的系统进行负载测试,但现在我遇到了一些Netty的可伸缩性问题。我尝试用尽可能多的并发Netty客户端连接到Netty服务器。对于少量客户端(100),我发现客户端总是提示“ClosedChannel异常”: java.nio.channels.ClosedChannel异常 位于org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$1

首先,感谢所有网络投稿人提供的伟大图书馆。我已经愉快地使用它好几个星期了

最近,我开始对我的系统进行负载测试,但现在我遇到了一些Netty的可伸缩性问题。我尝试用尽可能多的并发Netty客户端连接到Netty服务器。对于少量客户端(100),我发现客户端总是提示“ClosedChannel异常”:

java.nio.channels.ClosedChannel异常 位于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.niower.close(niower.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) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 运行(Thread.java:722)

我想知道如何使Netty支持更多的同步客户端连接,例如10K。我正在使用最新版本的Netty。以下是测试场景:

每个客户机向服务器发送一个四个字母的字符串,服务器处理程序在收到该字符串时不执行任何操作。每个服务器和客户机都运行在一台高性能机器上,该机器具有8个核心和16GB内存。这两台机器通过千兆字节网络连接

您有什么提示吗?

1)您可以在客户端引导中调整connectTimeout,以确保没有网络/服务器问题

clientBootStrap.setOption("connectTimeoutMillis", optimumTimout);
2) 通过在Netty服务器中设置backlog值,您可以增加传入连接的队列大小,这样客户端将有更好的机会连接到服务器

serverBootStrap.setOption("backlog", 1000);
3) 您已经说过,如果应用程序连接速度过快,您的应用程序将同时创建多个连接,即客户端Boss线程


Netty 3.2.7 Final允许在NioClientSocketChannelFactory构造函数中设置多个客户端Boss线程以避免此问题。

我在stacktrace.processConnectTimeout.processConnectTimeout中看到以下内容。客户端超时的原因是什么?可能是客户端Boss线程过载?我不确定。但在采纳了杰斯坦的建议后,这个问题就消失了。你的观点很有帮助。事实上,这是因为客户连接太快。在降低了分叉客户端线程的速度之后,现在Netty可以轻松地支持10K并发客户端,而不会引发任何异常。