springboot 单机 qps 只有 2000 合理吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
passer9527
V2EX    Java

springboot 单机 qps 只有 2000 合理吗?

  •  
  •   passer9527 2021-11-21 10:33:03 +08:00 6557 次点击
    这是一个创建于 1495 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们用的 springcloud 那一套,部署在阿里云的 ecs 上。

    ecs 配置:4c 8g
    程序流程:从 rds (mysql) 中获取数据,放入 redis ,然后做 vo 转换,返回。如果有 redis 有数据,就会直接返回,不会从 mysql 中获取。

    目前结果是单机 qps 只能到 2000 ,超过 3000 之后,机器负载就会很高,比如 cpu 超过 70%, 内存也超过 70%。

    我们高峰 qps 有 3w , 感觉能加很多机器才能抗住。

    我的问题是:springboot 的单机 qps 这么低吗?
    19 条回复    2022-01-28 16:20:32 +08:00
    xbh1794970183564
        1
    xbh1794970183564  
       2021-11-21 11:48:53 +08:00
    合理
    xbh1794970183564
        2
    xbh1794970183564  
       2021-11-21 11:50:39 +08:00
    3W 你们指望几台机器就顶住吗。。。
    wudaye
        3
    wudaye  
       2021-11-21 14:54:12 +08:00
    排查过瓶颈在哪吗?做过 tomcat 调优吗?
    moshiyeap100
        4
    moshiyeap100  
       2021-11-21 16:27:01 +08:00
    如果不是简单查询接口,我觉得还算合理的,我们的核心业务接口单机 qps 估计 400 都不到。。。。
    fighterhit
        5
    fighterhit  
       2021-11-21 16:34:33 +08:00
    听听楼下大佬怎么说
    mind3x
        6
    mind3x  
       2021-11-21 18:06:09 +08:00 via Android
    Spring Boot 什么版本?同步还是异步(WebFlux)? Redis 命中率多高? JVM heap 使用如何? GC 开销占多少?
    reeco
        7
    reeco  
       2021-11-21 18:20:56 +08:00 via iPhone
    信息太少了,没法评估
    coderbbb
        8
    coderbbb  
       2021-11-21 18:34:48 +08:00
    盲猜。按你说的程序流程的话,CPU 大头应该在 VO 转换上,建议把转换后的 VO 缓存。另外,还得看具体业务,比如 VO 的更新频率高不高,缓存命中率能到多少。
    Salticey
        9
    Salticey  
       2021-11-21 19:15:17 +08:00
    合理吧,我之前有压过一个和你说得类似的模块,还是 16C16G 的,但是是容器部署的(我晓得性能会损失多少),单纯命中缓存的数据 tps 能到 3700 ,再往上 cpu 打满直接宕机了。
    mazyi
        10
    mazyi  
    PRO
       2021-11-21 20:57:06 +08:00
    就看 vo 转换要多少 cpu 了,一个字段还是一百个字段都不一样
    lixintcwdsg
        11
    lixintcwdsg  
       2021-11-21 22:00:07 +08:00   8
    不合理,一般来说 QPS200 CPU70%,大概率存在大量线程切换,检查一下几个地方
    1. spring boot 线程数是不是满了,自带 tomcat 默认 200 ,如果满了说明后端处理太慢了。
    2. 看一下你的 mysql 线程池大小多少,是不是默认的 8 。
    3. 看一下你的 mysql 每条查询到底多少毫秒,开一下 druid 这类链接池监控就行,看看是不是 mysql 查询存在瓶颈。
    4. 开 jprofile 之类的工具,在线看一下 CPU 事件消耗在哪里,大概是 mysql 引起的线程等待

    可能的处理方案:
    1. 如果 mysql 存在瓶颈,建议把 spring boot 的线程数调低,高了毫无意义。
    2. mysql 查询快,你可以缩小你的 mysql 线程池数量,反之扩大。
    3. redis 确保用异步驱动不要用 jedis
    4. 客户端是离散的还是集中的,如果固定一些极其请求你这个服务,http keep-alive 记得开。

    最后,你这类服务如果要用 java ,不建议 spring boot 。至少不要用同步的 jdbc ,该用异步数据库驱动+异步 redis 驱动+少线程(一般都是基于 netty )的 web 容器。比如干脆 vert.x
    当然这个涉及到技术选型,可能你说了不算。还有一个方案你可以参考,就是把 spring boot 不要自己接 http 请求,spring boot 就启动一个 netty 就好了,netty 负责 http 编解码和 vo 转换部分,netty 和 spring boot 通过 applicationContext 交互。至少保证线程数不太多,CPU 也不会飙多高,你专心调整的 mysql 线程池到一个合理数量。
    最后,CPU 飙高说来说起大概率还是线程太多的问题~~
    R4rvZ6agNVWr56V0
        12
    R4rvZ6agNVWr56V0  
       2021-11-21 23:11:04 +08:00   1
    4c8g 的虚拟机能跑出这种 QPS 已经很好了。毕竟云上都是 vCPU ,主频分配是动态的。
    btw 从实用角度来看,单机这种量级的线上应用估计起码是个准独角兽公司吧
    Feiex
        13
    Feiex  
       2021-11-21 23:50:42 +08:00
    #11 基础上,再加一项:是不是日志打印太多了,关掉日志再看下
    salmon5
        14
    salmon5  
       2021-11-22 09:54:28 +08:00
    关键是“qps 有 3w”,不差这几块钱
    pmispig
        15
    pmispig  
       2021-11-22 10:01:47 +08:00
    单机居然有这么多,我们单机 qps 只有 20
    securityCoding
        16
    securityCoding  
       2021-11-22 11:24:47 +08:00
    @Feiex 日志打印可太影响效率了,曾经压测一个接口关闭日志后 qps 提高了 40%。。。
    securityCoding
        17
    securityCoding  
       2021-11-22 11:27:28 +08:00   1
    可以使用阿里开源的 arthas 注入进程看下整体的链路耗时
    jorneyr
        18
    jorneyr  
       2021-11-22 12:55:19 +08:00
    云主机的性能不好,同样的配置,比物理机差很多。

    2014 年的 MBP, i7 4C 8G ,也是 Spring Boo 程序,和你这个逻辑差不多。
    2018 年做的压测,同时连上无线和有线双网卡都工作,QPS 达到 15000 左右,如果只有无线或者有线,QPS 为 7000 多。
    xinQing
        19
    xinQing  
       2022-01-28 16:20:32 +08:00
    单机居然有这么多,我们单机 qps 只有 100
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3066 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 12:09 PVG 20:09 LAX 04:09 JFK 07:09
    Do have faith in what you're doing.
    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