服务端卡死诊断与恢复 · 2026-08-01
用户贴出的日志(昨晚 00:15–00:34 旧进程)
三类信号:
- JiuwenSwarm 连 18092 失败 —— 噪音。该 Swarm 网关本机未启动,重试 10 次后放弃("BossAgents 独立运行中"),与影响图/演示无关。
- RuleDrift 权威规则对账 —— 信息性。本地 2516 / SCSAI 2386,本地独有 131(builtin-*)、SCSAI 独有 1(inspect-inst-g002)。可
node server/scripts/sync-rules-bidirectional.js --both一次性对齐,非阻塞。 - EVENT LOOP STALLED ~232374ms(00:23:45→00:29:30)—— 真风险。事件循环被同步重活钉死 232 秒,期间服务能监听端口但无法响应(聊天会冻结 ~4 分钟)。
当前状态核查
- 贴日志时:pid 8552 已卡死(
/api/health超时,端口仍监听)。SCSAI 8732 当时不可达。 - 进程体征:CPU 95s、工作集 748MB、3 个 CloseWait 连接、1 条外网 Established(ylxt.chat)。
- crash.log 历史:
EVENT LOOP STALLED多次(07-31 还有 256s/292s),根因疑似 server 内置规则对账在 SCSAI 不可达时同步等待超时、钉死主线程。
处置
- 杀掉卡死 pid 8552(及残留),干净重启 → 新 pid 36012,
/api/health200。 - 验证 SCSAI 8732 已恢复(21s 可达,临时掉线)。
- 验证影响图接口:
/api/change/analyze0460-2536 → success=true、impactChain 30 边、affectedParts=16/affectedBoms=15、truncated=false —— 演示链路活。
根因定位进展
[RuleDrift]前缀在当前 server 源码中搜不到发射点(仅 sync-rules-bidirectional.js 的 usage doc 与 sqlite-compat.js 注释提及)。说明该日志来自旧版本进程或外部监控,非当前 server 直接打印。sync-rules-bidirectional.js自身有 SCSAI 连接自检,连不上即process.exit(1),不会卡死,且未被 server 定时 require(引用检索仅命中自身)。- 嫌疑转向 boss-scheduler/lib/consistency-check.js(含 getSciotDb + 在 boss-scheduler 下,可能是周期性权威对账入口),待进一步读取确认。
待办
- [ ] 读 boss-scheduler/lib/consistency-check.js,确认是否存在"SCSAI 不可达时同步阻塞"的对账任务。
- [ ] 若确认:加硬超时 + SCSAI 不可达即跳过(不阻塞主线程);或给 server 加 STALL 自动重启看护。
- [ ] 演示前可选跑
sync-rules-bidirectional.js --both对齐规则计数。
结论
演示当前可用(服务已恢复、影响图验证通过)。唯一真实隐患是"SCSAI 不可达时定时对账可能再次钉死事件循环",需加固;否则下次 SCSAI 抖动演示会冻结数分钟。
BossAgents