Java 同时净连接10000个

Java 同时净连接10000个,java,netty,Java,Netty,我正在尝试使用Netty同时模拟10000个客户端到服务器的连接。当956客户端连接到服务器时,一切正常,但957客户端会导致错误异常 注意:我在同一台机器上运行服务器和客户端(win7 8GB ram,i7 CPU) 错误: java.lang.IllegalStateException: failed to create a child event loop io.netty.channel.ChannelException: failed to open a new selector 我

我正在尝试使用Netty同时模拟10000个客户端到服务器的连接。当956客户端连接到服务器时,一切正常,但957客户端会导致错误异常

注意:我在同一台机器上运行服务器和客户端(win7 8GB ram,i7 CPU)

错误:

java.lang.IllegalStateException: failed to create a child event loop
io.netty.channel.ChannelException: failed to open a new selector
我的代码:

try {
        con.connect();
    } catch (Exception e) {
        logger.error("Client: error connect to ip {} and port {}, ",id, ip, port,e);
        return;
    }
connect
方法的代码为:

public void connect() {
    workerGroup = new NioEventLoopGroup();
    Bootstrap bs = new Bootstrap();
    bs.group(workerGroup).channel(NioSocketChannel.class);
    bs.handler(new ChannelInitializer<SocketChannel>() {
        @Override
        protected void initChannel(SocketChannel ch) throws Exception {
            ch.pipeline().addLast("idleStateHandler", new IdleStateHandler(0, 0, 300));
            ch.pipeline().addLast("idleStateActionHandler", new IdleStateEventHandler());
            ch.pipeline().addLast("logger", new LoggingHandler());
            ch.pipeline().addLast("commandDecoder", new CommandDecoder());
            ch.pipeline().addLast("commandEncoder", new CommandEncoder());
        }
    });
public void connect(){
workerGroup=new NioEventLoopGroup();
引导bs=新引导();
bs.group(workerGroup).channel(NioSocketChannel.class);
handler(新的ChannelInitializer(){
@凌驾
受保护的void initChannel(SocketChannel ch)引发异常{
addLast(“idleStateHandler”,新的idleStateHandler(0,0300));
ch.pipeline().addLast(“idleStateActionHandler”,新的IDleStateTeeventHandler());
ch.pipeline().addLast(“记录器”,新的LoggingHandler());
ch.pipeline().addLast(“commandDecoder”,新commandDecoder());
ch.pipeline().addLast(“commandEncoder”,新commandEncoder());
}
});

每次连接调用都应该使用相同的NioEventLoopGroup实例。否则会创建大量线程。

Windows在默认情况下允许打开的临时端口数量上有很大限制。我建议先检查该设置。(谷歌it,我忘了细节)。如果我使用相同的NioEventLoopGroup实例,它将与真实系统不同。@Alexbelenko您有一个“真实系统”在一台机器上一次运行10000个线程?我建议你听诺曼的话,重新思考一下你的测试。假设你正在对服务器进行压力测试,那么只要测试客户端发送真实的消息序列,测试客户端的样子又有什么关系呢?是的,我们当前的系统是2台服务器,每台服务器可以处理5000个客户端,还有更多每台服务器超过4000个客户端。