Jackett TooManyRequestsException 429 限流报错排查与 5 分钟恢复指南
【免费下载链接】JackettAPI Support for your favorite torrent trackers项目地址: https://gitcode.com/GitHub_Trending/ja/Jackett
日志里刷出TooManyRequestsException、Torznab 返回带Retry-After头的 429 响应?先别慌,这只是 Jackett(一个把 Sonarr、Radarr、Prowlarr 等客户端查询翻译成各家 tracker 请求的轻量 API 网关)触发了上游限流,跟着本文操作,5 分钟内可定位并恢复。
识别 429 报错的 3 个特征:日志、响应头与触发场景
⚠️ 三步确认,别急着改配置:
- 现象:客户端拉取结果失败,Torznab 响应体是 error XML(code 900),HTTP 状态码 429,响应头里通常挂着
Retry-After: 秒数。 - 日志特征:Jackett 日志出现
Rate limited或TooManyRequestsException,对应某条索引器查询记录。 - 触发场景(挑中的那几条多半就是你现在的情况):
- Sonarr、Radarr、Prowlarr 都在按分钟轮询,请求叠着发
- 某个客户端的刷新间隔调得比 tracker 容忍度还短
- 一次搜索勾选了十几个索引器,瞬间并发打满
- 刚批量新增索引器,全部处于首次探测的密集请求期
一张图看懂 429 限流异常的发生与重试链路
整条链路一句话:tracker 嫌请求太密就回 429 并附带建议等待时长;Jackett 把等待时长塞进异常对象里,既向上游报 429,也让自己在下一轮之前先歇够。异常的定义和Retry-After解析逻辑见 TooManyRequestsException.cs。
最快恢复服务的排查顺序:3 步从冷却到根治
Step 1 先让服务自己"退烧"(5 分钟内)
- 操作:打开 Jackett 的 Manual search 页面,逐个索引器手动发起一次搜索,找出返回 429 的那几个,然后关掉终端等待 10~15 分钟再重复。
- 生效标志:状态由失败转回绿色,搜索正常出结果。
- 背景:BaseIndexer.cs 中的基类索引器在查询失败后会把该索引器标记为 failing,后续查询自动延迟——基准 10 分钟起步、逐次翻倍、封顶 24 小时,多数情况等待即可自愈。
Step 2 削减总请求量(治本)
- 操作:禁用用不上的索引器;把 Sonarr/Radarr 里各索引器的刷新间隔从 15 分钟拉到 30~60 分钟;多个客户端的整点刷新错开,别放在同一时刻。
- 生效标志:观察 24 小时,日志不再出现
Rate limited。
Step 3 对高敏索引器单独降频(针对性)
- 操作:FileList、Avistaz 系、Postman 类 API 索引器各自内置了 429 拦截(源码如 FileList.cs、AvistazTracker.cs),在 Manual search 页逐个点测定位后,只给这几个把客户端轮询周期调长。
- 生效标志:其余索引器不受影响,被点名者的 429 归零。
进阶改码:自定义重试与退避策略(可选)
- 在
TooManyRequestsException的RetryAfter解析处改成指数退避:按失败次数翻倍计算等待时长并设上限,替代目前"直接用响应头秒数、缺省 60 秒"的做法。 - 给特定索引器覆写查询入口,在发起请求前追加一段独立冷却,等效于给这个站点单独限速。
别让 429 复发:参数加固对照
Jackett 内部的重试常量(改默认值需动源码):
| 配置项 | 默认值 | 建议值 | 理由 |
|---|---|---|---|
| Retry-After 解析失败时的等待 | 60 秒 | 120 秒 | ResultsController.cs 在头部缺失时按 1 分钟回给客户端,tracker 限流窗口普遍更长 |
| 失败后挂起基准 | 10 分钟 | 保持不变 | 基类指数退避的起点,配合客户端降频已足够 |
| 挂起时长上限 | 24 小时 | 保持不变 | 封顶防止坏索引器被无限期放弃 |
| 正常状态的有效期 | 2 × 缓存 TTL | 随缓存调整 | 决定"健康"判定多久复核一次 |
你在客户端侧真正能拧的参数:
| 配置项 | 现状 | 建议值 | 理由 |
|---|---|---|---|
| Sonarr / Radarr 索引器刷新间隔 | 15 分钟 | 30~60 分钟 | 直接压低请求频率,是复发主因 |
| Jackett 缓存 TTL | 30 分钟 | ≥30 分钟 | 命中缓存的查询不打到 tracker |
| 启用索引器数量 | 十几个 | 只留常用的 | 单条搜索的并发扇出立刻变小 |
按"先客户端、后 Jackett 缓存、最后动源码"的顺序逐项落地,每改一项观察一天,稳定 24 小时无 429 再停手;排查中途再撞 429,回到 Step 1 等待窗口,别叠加新改动。
延伸资源
- TooManyRequestsException.cs:异常定义与
Retry-After解析 - BaseIndexer.cs:基类捕获、挂起与指数退避
- ResultsController.cs:对客户端返回 429 与等待头
- 官方说明:Jackett 安装与使用文档
【免费下载链接】JackettAPI Support for your favorite torrent trackers项目地址: https://gitcode.com/GitHub_Trending/ja/Jackett
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考