mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-14 23:08:35 +08:00
解决 Netty 合并冲突并添加耗时监控
- 解决 NettyServerHandler.java 的 Git 合并冲突 - 添加消息处理耗时监控到 channelRead 方法 - 更新 improve_record.md 优化记录文档
This commit is contained in:
@@ -57,7 +57,7 @@
|
||||
|
||||
## 优化方案
|
||||
|
||||
### 优化 1: 修复 Pipeline 配置(优先级:P0)
|
||||
### 优化 1: 修复 Pipeline 配置(优先级:P0)✅ 已完成
|
||||
|
||||
**文件**: `jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerChannelInitializer.java:41`
|
||||
|
||||
@@ -76,7 +76,7 @@ pipeline.addLast(businessGroup, echoServerHandler); // 回复Handler也绑定
|
||||
|
||||
---
|
||||
|
||||
### 优化 2: 优化 PileChannelEntity 使用双向映射(优先级:P0)
|
||||
### 优化 2: 优化 PileChannelEntity 使用双向映射(优先级:P0)✅ 已完成
|
||||
|
||||
**文件**: `jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java`
|
||||
|
||||
@@ -84,12 +84,13 @@ pipeline.addLast(businessGroup, echoServerHandler); // 回复Handler也绑定
|
||||
1. 新增反向映射 `channelIdToPileSnMap`
|
||||
2. `getPileSnByChannelId()` 从 O(n) 优化到 O(1)
|
||||
3. 同步维护反向映射(checkChannel、removeByPileSn、removeByChannelId)
|
||||
4. 新增 `removeByPileSnAndChannelId()` 安全删除方法
|
||||
|
||||
**效果**: 当连接数多时,查询性能大幅提升
|
||||
|
||||
---
|
||||
|
||||
### 优化 3: 修改线程池拒绝策略(优先级:P1)
|
||||
### 优化 3: 修改线程池拒绝策略(优先级:P1)✅ 已完成
|
||||
|
||||
**文件**: `jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java`
|
||||
|
||||
@@ -108,7 +109,7 @@ private final int queueCapacity = 5000; // 增大队列容量
|
||||
|
||||
---
|
||||
|
||||
### 优化 4: 心跳处理完全异步化(优先级:P1)
|
||||
### 优化 4: 心跳处理完全异步化(优先级:P1)✅ 已完成
|
||||
|
||||
**文件**: `jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/HeartbeatRequestHandler.java:67-85`
|
||||
|
||||
@@ -131,16 +132,31 @@ return response;
|
||||
|
||||
---
|
||||
|
||||
### 优化 5: 增加心跳处理耗时监控(优先级:P2)
|
||||
### 优化 5: 增加心跳处理耗时监控(优先级:P2)✅ 已完成
|
||||
|
||||
**文件**: `jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java:174-180`
|
||||
**文件**: `jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java:81-127`
|
||||
|
||||
**修改内容**:
|
||||
```java
|
||||
long elapsed = System.currentTimeMillis() - startTime;
|
||||
int warnThreshold = "0x03".equals(frameTypeStr) ? 50 : 200;
|
||||
if (elapsed > warnThreshold) {
|
||||
log.error("【性能警告】消息处理耗时过长: {}ms, 帧类型: {}, pileSn: {}", elapsed, frameTypeStr, pileSn);
|
||||
@Override
|
||||
public void channelRead(ChannelHandlerContext ctx, Object message) throws Exception {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
// ... 原有代码 ...
|
||||
} finally {
|
||||
ReferenceCountUtil.release(message);
|
||||
|
||||
// 性能监控:记录消息处理耗时
|
||||
long elapsed = System.currentTimeMillis() - startTime;
|
||||
String frameType = ctx.channel().attr(LAST_FRAME_TYPE).get();
|
||||
// 心跳帧(0x03)处理超过50ms警告,其他帧超过200ms警告
|
||||
int warnThreshold = "0x03".equals(frameType) ? 50 : 200;
|
||||
if (elapsed > warnThreshold) {
|
||||
log.warn("【性能警告】消息处理耗时: {}ms, 帧类型: {}, channelId: {}",
|
||||
elapsed, frameType, ctx.channel().id().asLongText());
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -148,15 +164,51 @@ if (elapsed > warnThreshold) {
|
||||
|
||||
---
|
||||
|
||||
## 额外优化(团队完成)
|
||||
|
||||
### 优化 6: IdleStateHandler 超时调整
|
||||
|
||||
**文件**: `jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerChannelInitializer.java:38`
|
||||
|
||||
**修改内容**:
|
||||
```java
|
||||
// 修改前
|
||||
pipeline.addLast(new IdleStateHandler(30, 0, 0, TimeUnit.SECONDS));
|
||||
|
||||
// 修改后
|
||||
pipeline.addLast(new IdleStateHandler(15, 0, 0, TimeUnit.SECONDS)); // 读空闲tick设置为15s,连续3次空闲后再由handler执行关闭
|
||||
```
|
||||
|
||||
**效果**: 更快检测到心跳超时,及时处理连接异常
|
||||
|
||||
---
|
||||
|
||||
### 优化 7: 新增连接管理 AttributeKey
|
||||
|
||||
**文件**: `jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java:40-48`
|
||||
|
||||
**修改内容**:
|
||||
```java
|
||||
public static final AttributeKey<Integer> IDLE_COUNT = AttributeKey.valueOf("ykc_idle_count");
|
||||
public static final AttributeKey<String> LAST_FRAME_TYPE = AttributeKey.valueOf("ykc_last_frame_type");
|
||||
public static final AttributeKey<String> LAST_RECEIVE_AT = AttributeKey.valueOf("ykc_last_receive_at");
|
||||
public static final AttributeKey<String> LAST_SERIAL_NUMBER = AttributeKey.valueOf("ykc_last_serial_number");
|
||||
public static final AttributeKey<String> DISCONNECT_REASON = AttributeKey.valueOf("ykc_disconnect_reason");
|
||||
```
|
||||
|
||||
**效果**: 更精细的连接管理和断开原因追踪
|
||||
|
||||
---
|
||||
|
||||
## 修改文件清单
|
||||
|
||||
| 序号 | 文件路径 | 修改内容 |
|
||||
|------|----------|----------|
|
||||
| 1 | `jsowell-netty/.../NettyServerChannelInitializer.java` | EchoServerHandler 绑定到业务线程池 |
|
||||
| 2 | `jsowell-common/.../PileChannelEntity.java` | 新增反向映射,优化查询性能 |
|
||||
| 3 | `jsowell-framework/.../ThreadPoolConfig.java` | 修改拒绝策略,增大队列容量 |
|
||||
| 4 | `jsowell-netty/.../HeartbeatRequestHandler.java` | 心跳处理完全异步化 |
|
||||
| 5 | `jsowell-netty/.../NettyServerHandler.java` | 增加消息处理耗时监控 |
|
||||
| 序号 | 文件路径 | 修改内容 | 状态 |
|
||||
|------|----------|----------|------|
|
||||
| 1 | `jsowell-netty/.../NettyServerChannelInitializer.java` | EchoServerHandler 绑定到业务线程池<br>IdleStateHandler 从 30s 调整为 15s | ✅ 完成 |
|
||||
| 2 | `jsowell-common/.../PileChannelEntity.java` | 新增反向映射,优化查询性能<br>新增 removeByPileSnAndChannelId 方法 | ✅ 完成 |
|
||||
| 3 | `jsowell-framework/.../ThreadPoolConfig.java` | 修改拒绝策略,增大队列容量 | ✅ 完成 |
|
||||
| 4 | `jsowell-netty/.../HeartbeatRequestHandler.java` | 心跳处理完全异步化 | ✅ 完成 |
|
||||
| 5 | `jsowell-netty/.../NettyServerHandler.java` | 增加消息处理耗时监控<br>新增 AttributeKey 用于连接管理 | ✅ 完成 |
|
||||
|
||||
---
|
||||
|
||||
@@ -191,6 +243,7 @@ mvn clean package -DskipTests
|
||||
| 桩频繁登录 | 存在 | 消除 |
|
||||
| 连接查询性能 | O(n) | O(1) |
|
||||
| 线程阻塞风险 | 高 | 低 |
|
||||
| 超时检测响应 | 30s | 15s(更快)|
|
||||
|
||||
---
|
||||
|
||||
@@ -206,7 +259,8 @@ mvn clean package -DskipTests
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 记录人 | Claude Code |
|
||||
| 记录人 | Claude Code + 开发团队 |
|
||||
| 记录时间 | 2026-03-21 |
|
||||
| Git 分支 | dev |
|
||||
| 提交建议 | 建议创建新分支提交,便于回滚 |
|
||||
| 状态 | ✅ 全部优化已完成 |
|
||||
|
||||
Reference in New Issue
Block a user