gpt4 book ai didi

concurrency - 如何允许更多并发客户端与 Netty 连接?

转载 作者:行者123 更新时间:2023-12-04 11:58:23 25 4
gpt4 key购买 nike

首先,感谢所有 Netty 贡献者为这个伟大的图书馆。我已经愉快地使用了几个星期。

最近,我开始对我的系统进行负载测试,但现在我遇到了 Netty 的一些可扩展性问题。我尝试 fork 尽可能多的并发 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)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
在 java.lang.Thread.run(Thread.java:722)

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

每个客户端向服务器发送一个四字母的字符串,服务器处理程序在收到该字符串后什么都不做。每个服务器和客户端都运行在具有八核和 16GB 内存的高性能机器上。两台机器通过技嘉网络连接。

你有什么提示吗?

最佳答案

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

clientBootStrap.setOption("connectTimeoutMillis", optimumTimout);

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

3)你说你的应用程序同时创建了很多连接,Client Boss线程 may lag behind , 如果应用程序连接太快。

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

关于concurrency - 如何允许更多并发客户端与 Netty 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8442166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com