diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java index 4b342ec7b..e18edb1a7 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java @@ -15,6 +15,7 @@ import io.netty.handler.codec.mqtt.MqttEncoder; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import io.netty.handler.timeout.IdleStateHandler; +import io.netty.util.ResourceLeakDetector; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -53,23 +54,28 @@ public class NettyServerManager implements CommandLineRunner { .channel(NioServerSocketChannel.class) .handler(new LoggingHandler(LogLevel.DEBUG)) // .option(ChannelOption.SO_BACKLOG, 128) // 默认128 - .option(ChannelOption.SO_BACKLOG, 1024) + .option(ChannelOption.SO_BACKLOG, 2048) .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) // 启用池化内存分配器 // .option(ChannelOption.SO_RCVBUF, 64 * 1024) // .option(ChannelOption.SO_REUSEADDR, true) .childOption(ChannelOption.SO_KEEPALIVE, true) // 保持连接 // .childOption(ChannelOption.SO_RCVBUF, 64 * 1024) // 接收缓冲区 // .childOption(ChannelOption.SO_SNDBUF, 64 * 1024) // 发送缓冲区 - .childOption(ChannelOption.SO_RCVBUF, 1024 * 1024) // 接收缓冲区 - .childOption(ChannelOption.SO_SNDBUF, 1024 * 1024) // 发送缓冲区 + .childOption(ChannelOption.SO_RCVBUF, 2 * 1024 * 1024) // 接收缓冲区 + .childOption(ChannelOption.SO_SNDBUF, 2 * 1024 * 1024) // 发送缓冲区 .childOption(ChannelOption.TCP_NODELAY, true) // 禁用 Nagle 算法 - .childOption(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(32 * 1024, 64 * 1024)) // 写缓冲水位 + .childOption(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(64 * 1024, 256 * 1024)) // 写缓冲水位 .childOption(ChannelOption.SO_REUSEADDR, true) - // .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) // 启用池化内存分配器 + // 添加连接超时设置 + .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000) .childHandler(nettyServerChannelInitializer) .localAddress(new InetSocketAddress(host, port)); ChannelFuture future = bootstrap.bind(port).sync(); + + // 在启动时启用内存泄漏检测 + ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); + if (future.isSuccess()) { log.info("NettyServer启动成功, 开始监听端口:{}", port); } else { diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java index e74a2d7d0..35cf84170 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java @@ -150,9 +150,9 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { ByteBuf buffer = ctx.alloc().buffer().writeBytes(response); this.channelWrite(channel.id(), buffer); // 获取桩号 - String pileSn = PileChannelEntity.getPileSnByChannelId(ctx.channel().id().asLongText()); + // String pileSn = PileChannelEntity.getPileSnByChannelId(ctx.channel().id().asLongText()); // 批量响应客户端 - this.channelWriteBatch(pileSn, buffer); + // this.channelWriteBatch(pileSn, buffer); if (!CollectionUtils.containsAny(notPrintFrameTypeList, frameType)) { // 应答帧类型 byte[] responseFrameTypeBytes = YKCFrameTypeCode.PlatformAnswersRelation.getResponseFrameTypeBytes(frameTypeBytes);