V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
yumerdev93
V2EX  ›  NGINX

关于 Nginx 反向代理性能调优的问题,求指导🙏

  •  
  •   yumerdev93 · 21 小时 27 分钟前 · 1293 次点击

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

    16 条回复    2025-01-21 10:45:18 +08:00
    defunct9
        1
    defunct9  
       21 小时 17 分钟前   ❤️ 1
    开 ssh ,让我上去看看
    blackeeper
        2
    blackeeper  
       21 小时 16 分钟前
    NGINX 这几个配置你可以
    worker_aio_requests worker_connections
    blackeeper
        3
    blackeeper  
       21 小时 12 分钟前
    NGINX 这几个配置你可以改改看
    worker_processes 默认是 1
    worker_aio_requests 默认是 32
    worker_connections 这个默认是 512
    pangzipp
        4
    pangzipp  
       21 小时 9 分钟前   ❤️ 1
    use epoll;

    ulimit -n 检查下系统资源

    upstream 使用 keepalive
    yumerdev93
        5
    yumerdev93  
    OP
       21 小时 2 分钟前
    @blackeeper
    worker_aio_requests 这个参数是废弃了吧?
    worker_processes 一般都是 auto 使用 cpu 核心数,worker_connections 已经改到 10240 了,不是 worker_connections 的问题
    fengpan567
        6
    fengpan567  
       21 小时 1 分钟前
    检查 TCP 连接队列的配置,看下队列是不是太小了
    swananan
        7
    swananan  
       20 小时 54 分钟前
    NGINX 如果 cpu 跑满了,perf top -p {nginx-pid} 看下 NGINX 性能热点在哪里。
    yumerdev93
        8
    yumerdev93  
    OP
       20 小时 51 分钟前
    @pangzipp
    破案了,确实是 upstream 使用 keepalive CPU 就降低了,感谢兄弟🙏。
    gearfox
        9
    gearfox  
       20 小时 22 分钟前
    @defunct9 .............
    test00001
        10
    test00001  
       20 小时 2 分钟前
    nginx 配置方便看一下吗?
    hackroad
        11
    hackroad  
       16 小时 52 分钟前
    @gearfox #9 点通的 gearfox ?
    777Goea
        12
    777Goea  
       16 小时 9 分钟前 via iPhone
    这个得看看
    layxy
        13
    layxy  
       14 小时 42 分钟前
    docker nginx 默认配置应该会读取宿主机的 cpu 信息,有可能创建了太多的进程导致吞吐量下降
    gearfox
        14
    gearfox  
       2 小时 45 分钟前
    @hackroad 哈哈哈,那个号以前 2 个人用
    hackroad
        15
    hackroad  
       1 小时 44 分钟前
    @gearfox #14 果然是,我说怎么这么眼熟,这么多年过去了。。
    gearfox
        16
    gearfox  
       1 小时 14 分钟前
    @hackroad 时间真的过的好快
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4854 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:59 · PVG 11:59 · LAX 19:59 · JFK 22:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.