学习笔记,会随着学习继续修改,难免有不完整的地方。
去背景卡在 99%:模型下载超时 + 超时后状态没更新
卡在哪
Agent 对话「去掉背景,然后水平翻转一下」,第 1 步去背景一直停在 99%,几分钟没动静。

我怎么定位的
-
页面在转圈 → 去看 Worker(按 故障排查:从上往下查三层 的「Worker 单独看」)
- Worker 日志里有
TimeoutError,最后一行是一个下载进度条 - → 自己把「卡在 99%」和「timeout」联系了起来

- Worker 日志里有
-
读进度条的数字
| 项 | 数值 |
|---|---|
| 模型大小 | 1.02 GB |
| 下载速度 | 约 58 kB/s → 预计 4~5 小时 |
| 任务超时 | worker.py 里 job_timeout = 300,即 5 分钟 |
- → 5 分钟连 2% 都下不完,任务被超时杀掉

-
为什么模型这么大
- 运行指南说抠图模型约 170 MB(u2net),实际是 1.02 GB
- rembg 新版把默认模型换成了 bria-rmbg
- → 和 2026-10-13 MinIO 镜像下架 同一类:教程写完后上游变了
-
为什么这么慢
- 同一个文件用 curl 走系统代理(7892)下载:7.4 MB/s
- → Python 下载没走上这条快线路
-
补好模型、重启 Worker 后重试,还是停在 99%
- Worker 重启后没有收到任何新任务;API 日志全是前端轮询
GET .../messages - → 页面显示的是旧任务留下的状态

- Worker 重启后没有收到任何新任务;API 日志全是前端轮询
-
日志不说话,去看状态存在哪
- 查
tool_runs表:status = running、finished_at为空,已经挂了两小时 - Worker 早已判定失败(
j_failed=1),数据库状态却没更新 → 僵尸任务 - 源码
backend/app/services/tools.py第 61~66 行用except Exception兜底;超时取消抛的是CancelledError,它不是Exception的子类,兜底没接住
- 查
根因 & 修复
根因 三层叠加:① rembg 新版默认模型 1.02 GB,首次使用要现下载;② 下载没走快线路,远超 5 分钟任务超时;③ 超时取消抛
CancelledError,绕过了except Exception,任务状态永远停在 running,前端一直显示 99% 并拒绝新请求。
| 问题 | 修复 |
|---|---|
| 模型下载慢 | 用 curl 走 7892 下载 bria-rmbg-2.0.onnx,校验 sha256 后放到 ~/.rembg/models/bria-rmbg/bria-rmbg.onnx;实测去背景 29 秒完成 |
| 僵尸任务卡住界面 | 用项目自带的 runs.finish + continue_plan 把该任务标记为失败,前端出现重试 |
| 代码缺陷 | 在 tools.execute 中处理 CancelledError(自己动手修,见 11 我的扩展) |

下次我会先做什么
> 之后再遇到页面卡住、日志看不出什么的时候,去看一下任务的状态。 (查法见 故障排查:从上往下查三层「日志不说话时」;10-15 亲手查过一遍后写下)
