LAST_ACK 5 
 SYN_RECV 2 
 CLOSE_WAIT 2 
 ESTABLISHED 863 
 FIN_WAIT1 22 
 FIN_WAIT2 106 
 TIME_WAIT 4698 
when the ESTABLISHED reaches 2000, the sharp-sharp-sharp problem description is gradually increasing.
the server Aliyun 4-core 16G, run unsatisfactorily
related codes
 @ Slf4j 
 @ Component 
 public class NettyServer {
private EventLoopGroup bossGroup;
private EventLoopGroup workerGroup;
@Autowired
private NettyServerConfig nettyServerConfig;
public void start() {
    //bossGroup
    bossGroup = new NioEventLoopGroup();
    //workerGroupboss
    workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        serverBootstrap.group(bossGroup, workerGroup);
        serverBootstrap.channel(NioServerSocketChannel.class);
        serverBootstrap.childHandler(new ChannelInitializer<Channel>() {
            @Override
            protected void initChannel(Channel ch) throws Exception {
                
                ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN,Integer.MAX_VALUE,0,4,2,4,true));
                ch.pipeline().addLast(new IdleStateHandler(600, 600, 600, TimeUnit.SECONDS));//600
                ch.pipeline().addLast("handler", new NettyServerHandler());
            }
        });
        serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);//
        
        ChannelFuture f = serverBootstrap.bind(nettyServerConfig.getPort()).sync();
        if(f.isSuccess()){
            log.info("TCP Server Start Success------Port---" + nettyServerConfig.getPort() + "");
            f.channel().closeFuture().sync();
        } else {
            log.error("TCP Server Start Failed------Port---" + nettyServerConfig.getPort() + "");
        }
    } catch (Exception e) {
        log.error("======nettyserver stop======", e);
        stop();
    }
}
public void stop(){
    bossGroup.shutdownGracefully();
    workerGroup.shutdownGracefully();
}
}
 @ Slf4j 
 @ Service 
 public class NettyServerHandler extends ChannelInboundHandlerAdapter {
/**
 * channelAction
 *
 * 
 *
 */
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
    //
    Channel channel = ctx.channel();
    //
    NettyChannelManager.addTimeClear(channel);
}
/**
 *  
 */
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
    try {
        Integer roomNumber = NettyChannelUtil.getRoomNumber(ctx.channel());
        if (roomNumber != null) {
            //
            GameNavigation gameNavigation = SpringContextHolder.getBean(GameNavigation.class);
            gameNavigation.exitRoom(ctx.channel());
        }
    } catch (Exception e) {
        log.error("channelInactive Exception", e);
    }
}
/**
 * @param ctx
 * @param msg
 * @throws Exception
 */
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
    ByteBuf byteBuf = (ByteBuf) msg;
    try {
        int code = ByteBufUtil.readShort(byteBuf);
        byte[] bytes = ByteBufUtil.readBytes(byteBuf);
        GameNavigation gameNavigation = SpringContextHolder.getBean(GameNavigation.class);
        RoomProducer roomRequest = new RoomProducer();
        roomRequest.sendRoomRequest(code,bytes);
        gameNavigation.navigation(ctx.channel(), code, bytes);
    }catch (Exception e){
        log.error("channelRead Exception", e);
    } finally {
        byteBuf.release();
    }
}
/*
 * exceptionCaught
 *
 * exception    
 * Caught        
 *
 * 
 *
 */
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception
{
    try{
        if(cause.getClass() != IOException.class)
        {
            cause.printStackTrace();
/ / close ();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}
/**
 * 
 */
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
}
}
