以下环境均在 docker 中,nginx 用 host network 。
我现在在用 Nginx 代理一个 Fastapi 应用,从局域网内其他机器通过wrk 直接压测后端应用的一个简单返回,在 8 核 CPU 上有 4w QPS ,但通过 Nginx 代理 Fastapi 后,QPS 只有离谱的 2-3k ,我看后端机器 CPU 是没有跑满的,Nginx CPU 反而是占用满了。
压测结果:
2 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 115.25ms 86.47ms 712.60ms 45.32%
Req/Sec 0.91k 1.01k 3.74k 87.67%
27096 requests in 15.02s, 9.25MB read
Requests/sec: 1804.16
Transfer/sec: 630.75KB
上面操作均在 3 台局域网内机器,实际上在 Nginx 机器通过 curl 访问后端也只是 2ms 的延迟,请求这问题是出在哪儿了呢? Nginx 使用的是默认配置,没经过优化。
另外,通过 docker 部署 traefik 反向代理后压测,后端能正常跑满 CPU ,延迟也是正常的几毫秒之内,就是 traefik CPU 占用也挺大的,按道理来说 Nginx 性能应该强于 traefik 吧?
这个问题困扰了我好几天了,问 GPT Nginx 优化相关的也只是反复回答链接数、keep alive 这些,都试过了没作用,请问各位大哥 Nginx 应该怎么配置优化呢?
|