- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.) - frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts - scripts/: build, test-env, tools (Docker Compose, service templates, API parity) - docs/: AGENTS.md, superpowers specs, architecture docs - .gitignore: standard Java/Maven exclusions Moved from legacy maven-*/ root layout to backend/ organized structure.
7.5 KiB
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
根因分析:
// 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. 与本次代码变更的关系
本次变更范围:
TenantVisitorFloorPolicy(Entity + Mapper)TenantVisitorFloorPolicyService(新增)ImgPersonServiceImpl(detail + listByPage 策略插入)- Elevator
PersonRuleServiceImpl(已预先清理) - 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 健康检查告警 | 运维监控 |