记录一下那天晚上的排查过程。评测脚本逐条记录请求耗时,第一条包含模型加载与建连花了 42 秒,后面平均 1.8 秒,最终均值被拉到 3.4 秒,跟线上监控完全对不上。
刚开始盯着「连接池与 DNS 都是冷的」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。首条请求包含权重加载与连接建立。少数情况下是没有做 warmup 就直接开始计时。
不容易想到的是,统计里混入了排队等待时间。
空跑 3 次不计入统计
python bench.py --warmup 3 --n 100 --out lat.json
随后分别记录建连时间与首 token 时间
python -c "print({'connect_ms':0,'ttft_ms':0})"
接着用 P50 与 P95 替代均值
python -c "import json,statistics;d=json.load(open('lat.json'));print(statistics.median(d),sorted(d)[int(len(d)*0.95)])"
与线上监控的同口径指标对比
python compare_lat.py --local lat.json --prod prod.json
改之前先确认了最近有没有人动过配置,避免白查一遍。
改完先别撤,确认这几项。去掉 warmup 后均值回到 1.9 秒,与线上 P50 的差距在 10% 以内。
提醒一点。压测和评测都要先预热,均值对长尾太敏感,报告里给 P50 与 P95 更有参考价值。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
