Nginx 性能很差怎么回事,只能达到几百的 qps - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luckyrayyy
V2EX    问与答

Nginx 性能很差怎么回事,只能达到几百的 qps

  •  
  •   luckyrayyy 2019-06-28 12:07:27 +08:00 8851 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天项目压测用到了 Locust,今天无聊就写几个简单用例测着玩。开始用 spring boot 写 hello world,qps 大几百,但是我对这个数没什么概念,心想最快的应该是 nginx 这种静态服务器了吧,nginx 又是以性能出色著称的。

    然后试了试,竟然还是几百...我开始怀疑 Locust 是不是不给力处理不了太多请求,然后换 vert.x 的客户端进行请求,发现也就刚一千的 qps。

    我记得看 web 服务器框架的性能排行榜,普遍能到几十万的数量级,即便我机器性能一般,几万总得有吧,然后换 vert.x 的 client 请求 vert.x 的 server,qps 一下就上来了,到五万多。

    所以我没搞明白 nginx 到底哪里有问题,是我需要修改某些特定的配置吗? worker processes 和 worker connections 都已经调高了,还需要改什么吗?

    25 条回复    2020-06-07 23:15:50 +08:00
    meik2333
        1
    meik2333  
       2019-06-28 12:17:03 +08:00 via Android
    你 Nginx 测试的时候后端是什么?
    MeteorCat
        2
    MeteorCat  
       2019-06-28 12:23:03 +08:00 via Android
    是不是挂个 spring boot 把内存和线程全占了?(1g1h 的服务器)
    0ZXYDDu796nVCFxq
        3
    0ZXYDDu796nVCFxq  
       2019-06-28 12:34:38 +08:00 via Android
    如果 nginx 里直接 return 内容,我能跑到百万级别的 qps
    chinesestudio
        4
    chinesestudio  
       2019-06-28 12:34:57 +08:00 via Android
    一台不行几台就行 haproxy +nginx cluster
    azh7138m
        5
    azh7138m  
       2019-06-28 13:08:23 +08:00
    一般业务遇不到 nginx 瓶颈的,就是你的” spring boot 写 hello world ”太慢了而已
    Infernalzero
        6
    Infernalzero  
       2019-06-28 13:22:37 +08:00
    我猜你的 Nginx 没有设置到 upsteam 的 keepalive,所以主要耗时都在创建 tcp 连接上了
    Asice
        7
    Asice  
       2019-06-28 13:29:41 +08:00
    大家都是以自己掌握的知识和理论推测
    正常这种问题怎么分析问题出在哪里才是重点
    Asice
        8
    Asice  
       2019-06-28 13:30:43 +08:00
    去掉 nginx,直接压测应用看看
    regist
        9
    regist  
       2019-06-28 13:40:10 +08:00 via iPhone
    @Asice 跟提问有关,楼主真对的 nginx 发问
    Asice
        10
    Asice  
       2019-06-28 13:44:52 +08:00
    @regist
    性能肯定在 tomcat 上
    如果只要单 tomcat,有没有 nginx 都是一样的,多上 nginx,性能影响是微乎其微的,所以单 tomcat 还不如直接拿掉 nginx
    多个 tomcat,或者页面很多静态文件的,才能体现 nginx 的用处
    zwh2698
        11
    zwh2698  
       2019-06-28 13:51:40 +08:00 via Android
    我记得微软系编程的同学,老师一般会给说,出问题一定不是系统是你自己用的问题。我觉得这句话在这里也适用。
    misaka19000
        12
    misaka19000  
       2019-06-28 13:57:25 +08:00
    压测的时候关注下 Nginx 的 CPU 和内存占用
    msg7086
        13
    msg7086  
       2019-06-28 14:07:46 +08:00
    Nginx 静态跑几百 qps 是有什么问题了吧。我单核 VPS 上的 Nginx 跑动态都能跑小几千 qps。
    Vegetable
        14
    Vegetable  
       2019-06-28 14:14:15 +08:00
    你这个 helloworld 已经慢出天际了
    imherer
        15
    imherer  
       2019-06-28 14:22:02 +08:00
    直接丢个静态文件在 Nginx 里压测下看看能跑到多少?
    patx
        16
    patx  
       2019-06-28 14:46:57 +08:00 via Android
    应用服务器多少 qps
    peanuts7660
        17
    peanuts7660  
       2019-06-28 14:49:43 +08:00
    如果用的 windows 并且 Nginx 的配置文件写的 localhost
    试试把 localhost 改为 127.0.0.1 看下效果
    mzdblsw8
        18
    mzdblsw8  
       2019-06-28 15:08:14 +08:00
    nginx 正常可以达百万级别转发。 应该是你应用的问题。先去掉 nginx 测试再说吧。
    luckyrayyy
        19
    luckyrayyy  
    OP
       2019-06-28 15:54:00 +08:00
    我可能描述的不太清楚,nginx 后面没有 tomcat,只有一个静态的 index.html。

    另外 Locust 是模拟 1000 个用户的请求,自己用 vert.x 的 client 是用了几十一百个线程的线程池不断请求。

    nginx 是在 docker 里面的,docker 配置的资源量是 4c6g。

    宿主机系统是 mac 系统。

    @meik2333
    @MeteorCat
    @azh7138m
    @Asice
    azh7138m
        20
    azh7138m  
       2019-06-28 16:56:40 +08:00
    @luckyrayyy 我试了一下默认配置

    mbp 13 2017 高配,docker 跑,接近 1w qps 了,不妨发一下你的测试用例


    https://gist.github.com/muzea/9046afc136b1717a113e5b430cef3aed
    alvinbone88
        21
    alvinbone88  
       2019-06-28 17:28:40 +08:00
    配置 NGINX 使用 epoll ( Linux )或 kqueue ( Mac )
    Mac 上跑 docker 相当于开虚拟机跑 Linux,所以直接选 epoll 就行
    yanguangs
        22
    yanguangs  
       2019-06-28 19:03:15 +08:00
    有可能是测试工具的问题
    我们前几天碰到的问题就是 nginx 配了还不如没配的情况.
    但我们使用 jmeter 测试出来的指标又很正常.

    最后发现开发用的 Jmeter 与测试的 loadrunner 的 http headers 不一样
    loadrunner 的 useragent 为 mozilla4.0 而 jmeter 为 mozilla5.0
    iyaozhen
        23
    iyaozhen  
       2019-06-28 22:21:57 +08:00 via Android
    @luckyrayyy 另外 Locust 是模拟 1000 个用户的请求,自己用 vert.x 的 client 是用了几十一百个线程的线程池不断请求

    这个没看懂,locust 调用 vert.x 当发压端?
    sakurazensen
        24
    sakurazensen  
       2020-06-07 22:37:07 +08:00
    8c16G 的 nginx,就一个 hello,world 静态页面,用 jmeter 压测只有 2w 的 TPS 不知道咋回事
    luckyrayyy
        25
    luckyrayyy  
    OP
       2020-06-07 23:15:50 +08:00   1
    @sakurazensen 哈哈哈哈一年前的坟你也挖出来了,后来发现了 Nginx 默认的配置并不适合这么高的并发,把线程数增加就行了。worker_connections 调高就能高不少,另外继续优化的话要改很多参数,包括 Linux 的配置,文件描述符数量等等一堆东西。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2595 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 111ms UTC 12:24 PVG 20:24 LAX 05:24 JFK 08:24
    Do have faith in what you're doing.
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'qna'); ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86