Skip to content

长链路任务卡住、重复执行或产物错位时怎样排查?

题型:问题排查 · 用统一标识还原一次节点尝试的完整轨迹。

排查顺序

  1. 先确认现象是状态停滞、实际未执行、重复执行,还是产物已经生成但绑定到了错误的 Episode/Shot,并记录受影响 Job 范围。
  2. 用 jobId、episodeId、shotId、nodeId 和 attemptId 串起控制面状态迁移、队列投递、Worker 领取、模型请求、Schema 校验和产物提交,找到最后一个可信事件。
  3. 检查节点租约与心跳是否过期、消息是否重投、多个调度器是否同时迁移状态,以及重试是否沿用了同一个幂等键。
  4. 对“结果未知”单独处理:模型或产物服务可能已经成功,但调用方超时。先按请求 ID 或内容摘要查询结果,不能直接再次触发有成本或有副作用的生成。
  5. 产物错位重点核对稳定实体 ID、输入版本、对象路径和提交清单,避免只根据数组下标或展示顺序关联 Shot。

止损与修复

先暂停受影响 Job 的下游调度,保留状态和原始响应快照;重复消费时关闭异常消费者或收紧租约,错位产物则隔离而不是覆盖正确版本。永久修复应落在条件状态迁移、幂等键、提交协议、版本校验或孤儿产物对账上,而不是简单增加重试次数。

验证与复盘

从故障前的稳定 Checkpoint 恢复一条小样本链路,验证同一消息重复投递不会产生第二份有效产物,且任务最终状态与产物清单一致。复盘补充卡住时长、租约过期、重复执行、未知结果和孤儿产物监控,并保留最小复现轨迹。

易错点

  • 不要看到状态未更新就认定模型没有执行,先确认是否属于结果未知。
  • 不要直接删除错误产物或强改成功状态,这会破坏后续对账证据。

知识关系

从当前问题继续深入,或者回到提出这个问题的知识入口。