自建网关按 RPM 限到 500,客户端单请求平均 6k token,凌晨批量任务把 TPM 打满,接口开始返 429,监控里请求数还没到阈值。

这类报错背后常见的原因有几处,逐个排除就行。只统计请求条数,没有累计 token;预估值按字符数除以 2,低估三成;批量任务与在线流量共用同一个配额池;429 后立刻重试,把消耗又放大一轮。

上来先统计每分钟的真实 token

python -c "import json;print(sum(json.loads(l)['usage']['total_tokens'] for l in open('req.jsonl')))"

给网关加 token 维度配额

python -c "print({'rpm':500,'tpm':200000})"

接着把批量任务拆到独立配额池

python -c "print('batch pool: tpm=120000')"

压一轮看 429 是否消失

python bench.py --concurrency 32 --num-prompts 500

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

这台环境是别人交接的,不少默认值被动过,只能一项项核。

同事提醒我看一下最近一次发布,时间点确实对得上。

别只看报错消失,验证要多做一步。高峰期不再出现 429,TPM 曲线贴着上限但不越界,在线请求 P95 延迟不变。

提醒一点。供应商的限流基本都按 token 算,只盯 QPS 会在长请求上翻车。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189