大模型中转慢请求堆积,连接池、读写超时全套参数调优
大模型中转服务出现请求堆积,通常表现为接口响应变慢、上游超时不返回、连接被持续占用。
本文以 Nginx 作为中转层、后端应用使用 Python/Gunicorn 为例,给出连接池和读写超时的完整调优步骤,零基础也可以照着操作。
先确认堆积发生在哪一环
执行 ss -lntp 查看端口连接队列,如果大量连接处于 SYN_RECV 或 ESTABLISHED 且处理速度慢,先看后端日志。
接着用 curl -w 测量上游响应时间,确定是连接建立慢还是读响应慢。
ss -lntp | grep 8000
curl -w "连接耗时:%{time_connect}s 总耗时:%{time_total}s\n" -o /dev/null -s https://your-api.com/v1/chat
调整 Nginx 连接池与 keepalive
中转层常见的瓶颈是 upstream 连接被反复重建。
在 Nginx 配置文件 http 块中开启 keepalive:
upstream model_api {
server 127.0.0.1:8000;
keepalive 64;
}
然后在 location 中指定 proxy_http_version 1.1; 和 proxy_set_header Connection "";。keepalive 值建议先设为后端最大并发数的 20%~30%,
后续根据压测结果调整。
location /v1/ {
proxy_pass http://model_api;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
}
读写超时参数成套配置
Nginx 连接上游时涉及三个关键超时:
proxy_connect_timeout:建立连接的超时,默认 60s,可缩短到 10s;proxy_send_timeout:发送请求数据的超时,建议 30s;proxy_read_timeout:等待上游响应的超时,大模型推理常会超过 60s,建议设置为 300s 或更长。
同时调整后端 Gunicorn 的 worker 超时:
timeout 300
keepalive 5
keepalive 指 worker 进程等待下一次请求的秒数,不是连接池大小。
若设置的 timeout 小于模型推理耗时,worker 会被误杀。
避坑提醒
- 不要把
keepalive设得过大,否则空闲连接占用内存和文件描述符。 - 调大
proxy_read_timeout时,要同步检查后端负载均衡器或云服务商的读超时是否被拦截。 - 修改配置后执行
nginx -t再重载,不要直接重启。 - 如果是 Java 或 Go 服务,还要检查数据库连接池(如 HikariCP 的
maximum-pool-size)的大小,避免线程等待锁导致的堆积。
验证调优效果
用 ab -n 1000 -c 100 http://your-api/ 压测,观察失败率和平均响应时间。
再看 ss -s 中的连接数变化。
如果 ab 结果中 Failed requests 为 0,且无 upstream timed out 日志,说明调优基本生效。
若仍堆积,继续抓包或使用 perf top 排查锁竞争。
如果你正在处理大模型中转慢请求堆积,建议先按本文调整连接池和读写超时,再根据实际压测结果微调;
遇到异常时优先回看避坑部分。