# 长任务批处理控制台
## 长任务批处理 Doctor 诊断流程样例
### 场景
一个商品域会话打标任务正在跑,raw 里已经有成功结果,但并发从 64 开始触发 Ark 429。此时不要直接重启全量任务,而是先跑 doctor 判断是否可断点续跑。
### 输入
- raw:`projects/xxx/raw/*.jsonl`
- 日志:`projects/xxx/run.log`
- 参数:`provider=ark`,`concurrency=64`,`resume_mode=only-errors`
### 执行
```bash
python3 /Users/bytedance/Documents/job-bu/data-analysis-workspace/tools/batch_job_doctor.py \
--raw-glob 'projects/xxx/raw/*.jsonl' \
--log projects/xxx/run.log \
--provider ark \
--job-name 商品会话标签
```
### 诊断输出
| 检查项 | 结果 | 判断 |
|---|---:|---|
| 总任务数 | 45,341 | 正常 |
| 已成功 | 7,354 | raw 可保留 |
| 当前未解决错误 | 0 | 可继续 |
| 最近吞吐 | 200 条/分钟 | 稳定 |
| 429 命中 | 曾在 64 并发出现 | 建议降并发 |
| ETA | 约 190 分钟 | 可接受 |
### 建议动作
1. 停掉高并发父进程,保留 raw。
2. 使用 `--only-errors` 或 resume manifest 继续跑。
3. 并发从 64 降到 32;如果 429 仍增长,再降到 16。
4. 合并前运行错误分类器,避免把 `sessid=...429` 这种普通字段误判为 provider 429。
### 成功信号
- `ok` 数持续增加,`provider_429` 不再增长。
- doctor 生成的 retry 清单为空或逐步收敛。
- 合并脚本没有把正常 session id、文本内容中的 `429` 当成失败。
### 失败信号
- 429 占比持续上升,吞吐下降但错误增长。
- raw 中 ok/error schema 混杂,doctor 无法判断断点。
- retry 后同一批 case 被反复标成 `parse_error`,需要先修解析或错误识别规则。