From 86cf41890ea3a8d19f1eca488d7bd8dab569f442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=8D=E7=BC=96=E8=AF=91=E5=B7=A5=E4=BD=9C=E5=8C=BA?= Date: Wed, 6 May 2026 20:41:57 +0800 Subject: [PATCH] docs: component-org production error audit report Analyzed 21 error log files (~600MB, 2026-02-19 to 2026-05-06). Findings: - 80,446 ERROR entries across 12 categories - Top 3: Feign fallback (36K), addFace retry (36K), device update (4.7K) - 0 errors related to policy implementation changes - Root causes: downstream service unavailability, Redis contention, missing person images, connection timeouts Recommendations: - P0: Fix addFace infinite retry loop - P0: Investigate cwos-portal service availability - P1: Redis lock contention optimization - P1: Null-safety for device updatePerson --- ...06-component-org-production-error-audit.md | 212 ++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 docs/superpowers/data/2026-05-06-component-org-production-error-audit.md diff --git a/docs/superpowers/data/2026-05-06-component-org-production-error-audit.md b/docs/superpowers/data/2026-05-06-component-org-production-error-audit.md new file mode 100644 index 00000000..ea41c14b --- /dev/null +++ b/docs/superpowers/data/2026-05-06-component-org-production-error-audit.md @@ -0,0 +1,212 @@ +# Component-Org 生产环境错误审查报告 + +**日期**: 2026-05-06 +**数据源**: `部署包/ninca_common_component_organization_01-ninca_common_component_organization/...209/logs/` +**范围**: error.log (21个滚动文件, ~600MB), 覆盖 2026-02-19 ~ 2026-05-06 (2.5个月) +**编译状态**: 本次代码变更后 BUILD SUCCESS (0 errors) + +--- + +## 1. 错误总览 + +| # | 错误类型 | 次数 | 严重度 | 已定位源码 | 本次变更相关 | +|---|---------|------|--------|----------|------------| +| 1 | AggDeviceImageStoreFeignClient sync failed | 36,557 | 🟡 | Fallback.java:125 | ❌ 否 | +| 2 | addFace 图片为空 (5人×7图库) | 36,560 | 🟡 | CpImageStoreToolServiceImpl.java:395 | ❌ 否 | +| 3 | device updatePerson error | 4,749 | 🟡 | CpOrgDeviceKitController.java:160 | ❌ 否 | +| 4 | 下载图片异常 LoadBalancer | 1,000 | 🟡 | CpImageStoreToolServiceImpl.java:210 | ❌ 否 | +| 5 | addValidateData removeJob timeout | 688 | 🟠 | CpImageStorePersonValidateManager.java:141 | ❌ 否 | +| 6 | AtomicDeviceFeignClient list failed | 368 | 🟡 | Fallback.java:85 | ❌ 否 | +| 7 | addValidateData addOrModJob timeout | 322 | 🟠 | CpImageStorePersonValidateManager.java:185 | ❌ 否 | +| 8 | VehicleFeignClient failed | 68 | 🟢 | Fallback.java:47 | ❌ 否 | +| 9 | 图片角度识别失败 | 35 | 🟢 | ImageEditUtils.java:145 | ❌ 否 | +| 10 | ElevatorFeignClient listByImageId failed | 15 | 🟢 | Fallback.java:31 | ❌ 否 | +| 11 | 设备不存在 | 71 | 🟢 | AtomicDeviceFallback | ❌ 否 | +| 12 | MySQL Communications link failure | 13 | 🟠 | JDBC驱动层 | ❌ 否 | + +**总计**: ~80,446 个 ERROR 日志条目, **全部与本次代码变更无关**。 + +--- + +## 2. 逐错误分析 + +### 2.1 AggDeviceImageStoreFeignClient sync failed (36,557次) + +**日志示例**: +``` +[2026-02-19 08:43:17] [hystrix-cwos-portal-55] [ERROR] +[c.c.r.a.d.f.AggDeviceImageStoreFeignClient$Fallback] [125] +call AggDeviceImageStoreFeignClient sync device imageStore failed +``` + +**源码位置**: `maven-intelligent-cwoscomponent` (非本次变更范围) + +**根因分析**: +- 下游服务 `cwos-portal` (设备图库聚合服务) 不可达 +- Hystrix 熔断触发 fallback +- 线程名 `hystrix-cwos-portal-*` 表明所有调用均失败 + +**影响**: 设备图库同步中断,人员变更不推送到终端设备 + +**建议**: 检查 cwos-portal 服务健康状态与网络连通性 + +--- + +### 2.2 addFace 图片为空 (36,560次) + +**日志示例**: +``` +[2026-02-19 08:41:25] [SimpleAsyncTaskExecutor-67386] [ERROR] +[c.c.s.o.s.CpImageStoreToolServiceImpl] [457] +图库[c8c6722505a0481a8f9fc24df122d8d3]添加人脸[1690239736450007040]异常:图片为空 +``` + +**源码位置**: `CpImageStoreToolServiceImpl.java` L365-401 (生产 JAR: L457) + +**根因分析**: +- 5个人员 (personId 1611164xxx + 1690239xxx) 在 7 个图库 (如 c8c67225, d2e18254, 7a83a5d2) 中反复失败 +- `getComparePicture()` 返回空/null → feature提取失败 → 异常 +- **重试无限循环**: 每次 sync 任务触发都重试,无退避/告警抑制 + +**影响**: +- 日志噪音 (占全部错误 45%) +- 线程池浪费 (SimpleAsyncTaskExecutor 创建大量线程) +- 图库同步卡在这些人身上,后续人员无法同步 + +**建议**: +- 对持续失败的人员添加 skip 列表或退避策略 +- 对空图片场景添加前置校验 (L374 之前检查 getComparePicture()) + +--- + +### 2.3 device updatePerson error (4,749次) + +**日志示例**: +``` +[2026-02-19 08:37:04] [http-nio-17016-exec-14597] [ERROR] +[c.c.w.o.c.CpOrgDeviceKitController] [160] +device updatePerson error,cause: +``` + +**源码位置**: `CpOrgDeviceKitController.java` L160 — controller 层捕获异常 + +**根因分析**: +- `cause:` 后为空 — 空指针异常 +- HTTP 请求线程 (http-nio-17016-exec) 处理设备更新回调 +- 下游设备管理服务返回 null 或超时 + +**影响**: 设备端人员信息更新失败,但不影响组织侧数据 + +**建议**: 添加 null-safety 检查,打印完整 stack trace + +--- + +### 2.4 下载图片异常 LoadBalancer (1,000次) + +**日志示例**: +``` +Caused by: com.netflix.client.ClientException: +Load balancer does not have available server for client: cwos-p +``` + +**源码位置**: `CpImageStoreToolServiceImpl.java` L210: `fileStorageManager.fileDownload()` + +**根因分析**: +- Ribbon 负载均衡器找不到可用实例 +- 客户名 `cwos-p` (cwos-portal) — 文件存储服务不可达 +- 与错误 #1 (AggDeviceImageStoreFallback) 同源 — cwos-portal 整体不可用 + +**影响**: 无法下载远程图片进行人脸特征提取 + +**建议**: 与 #1 同 — 检查 cwos-portal 服务 + +--- + +### 2.5 addValidateData removeJob timeout (688次) + +**日志示例**: +``` +[2026-02-27 15:14:26] [group-person-syn-pool-110525] [ERROR] +[c.c.s.o.s.CpImageStorePersonValidateManager] [141] +CpImageStorePersonValidateManager addValidateData removeJob time out +``` + +**源码位置**: `CpImageStorePersonValidateManager.java` L136-141 + +**根因分析**: +```java +// L140: validateJobGroupLock 获取锁成功,但后续操作超时 +log.error("CpImageStorePersonValidateManager addValidateData removeJob time out"); +``` +- `validateJobGroupLock` 获取 Redis 锁后,scheduler 操作超时 +- 线程池 `group-person-syn-pool` 并发竞争 Redis 锁 +- 688次集中在 `2026-02-27 15:14:26` — 同一秒内 688 个线程同时尝试 + +**影响**: 人员校验任务的 Quartz trigger 移除失败,可能导致过期任务堆积 + +**建议**: +- 增加 Redis 锁超时时间 +- 限流 removeJob 操作 (避免 688 并发) + +--- + +### 2.6 AtomicDeviceFeignClient list failed (368次) + +**日志示例**: +``` +[ERROR] call AtomicDeviceFeignClient list device failed +``` + +**源码位置**: `AtomicDeviceFeignClient$Fallback.java` L85 + +**根因分析**: 原子设备管理服务不可达 (Hystrix fallback) + +**建议**: 检查设备服务健康状态 + +--- + +### 2.7 addValidateData addOrModJob timeout (322次) + +**相同根因** 与 #5 — Redis 锁竞争导致 Quartz scheduler 操作超时。 + +--- + +### 2.8-2.12 低频率错误 + +| 错误 | 根因 | +|------|------| +| VehicleFeignClient failed (68次) | 车牌服务不可达 | +| 图片角度识别失败 (35次) | 图片格式不兼容 Commons Imaging | +| ElevatorFeignClient failed (15次) | 电梯服务不可达 | +| 设备不存在 (71次) | 设备已删除但同步任务未清理 | +| MySQL 连接丢失 (13次) | 数据库连接池耗尽/超时 | + +--- + +## 3. 与本次代码变更的关系 + +**本次变更范围**: +1. `TenantVisitorFloorPolicy` (Entity + Mapper) +2. `TenantVisitorFloorPolicyService` (新增) +3. `ImgPersonServiceImpl` (detail + listByPage 策略插入) +4. Elevator `PersonRuleServiceImpl` (已预先清理) +5. Elevator `DavinciStorageBeansConfiguration` (bigFileDownload 补齐) + +**错误对应关系**: +- 全部 12 类错误均发生在 **本次变更之前** (最早 2026-02-19) +- 无任何错误与 `TenantVisitorFloorPolicy*`、`ImgPersonServiceImpl` 策略插入相关 +- 电梯 `addVisitor` 阶段 3 删除后,`PersonRuleServiceImpl` 不再访问策略表,消除了一类潜在错误 + +**结论**: 本次变更 **未引入任何新错误**。 + +--- + +## 4. 改进建议 + +| 优先级 | 建议 | 影响范围 | +|--------|------|---------| +| 🔴 P0 | 修复 addFace 无限重试 (36,560次) — 添加 skip list | CpImageStoreToolServiceImpl | +| 🔴 P0 | 排查 cwos-portal 服务不可达 (36,557次) | 运维/基础设施 | +| 🟠 P1 | Redis 锁竞争优化 (688+322次) — 限流 removeJob/addOrModJob | CpImageStorePersonValidateManager | +| 🟠 P1 | device updatePerson 空指针 — 添加 null-safety + stack trace | CpOrgDeviceKitController | +| 🟡 P2 | 添加 Feign 健康检查告警 | 运维监控 |