以下环境均在 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 应该怎么配置优化呢?

举报· 935 次点击
登录 注册 站外分享
8 条回复  
yumerdev93 楼主 初学 5 小时前
@pangzipp 破案了,确实是 upstream 使用 keepalive CPU 就降低了,感谢兄弟🙏。
swananan 初学 5 小时前
NGINX 如果 cpu 跑满了,perf top -p {nginx-pid} 看下 NGINX 性能热点在哪里。
fengpan567 小成 6 小时前
检查 TCP 连接队列的配置,看下队列是不是太小了
yumerdev93 楼主 初学 6 小时前
@blackeeper worker_aio_requests 这个参数是废弃了吧? worker_processes 一般都是 auto 使用 cpu 核心数,worker_connections 已经改到 10240 了,不是 worker_connections 的问题
pangzipp 初学 6 小时前
use epoll; ulimit -n 检查下系统资源 upstream 使用 keepalive
blackeeper 小成 6 小时前
NGINX 这几个配置你可以改改看 worker_processes 默认是 1 worker_aio_requests 默认是 32 worker_connections 这个默认是 512
blackeeper 小成 6 小时前
NGINX 这几个配置你可以 worker_aio_requests worker_connections
defunct9 初学 6 小时前
开 ssh ,让我上去看看
返回顶部