Tomcat 高并发情况下响应时间优化 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
night98
V2EX    程序员

Tomcat 高并发情况下响应时间优化

  •  
  •   night98 2022-03-21 21:57:54 +08:00 2779 次点击
    这是一个创建于 1315 天前的主题,其中的信息可能已经有所发展或是发生改变。

    应用服务器配置 2C4G MYSQL 配置 1C1G SpringBoot 项目,使用 Docker 运行,默认配置,最大内存配置 2G ,运行环境 OPENJDK17 ,内嵌 tomcat 容器,JVM 配置为默认配置,内存在并发情况下较为稳定,G1 GC 无明显影响

    数据库连接池大小为固定 4 个连接

    代码场景(抢红包): 接口 A 写入一条记录+N 条(10)记录 接口 B 分别更新接口 A 的 N 条记录

    现主要问题,高并发情况下(并发数 100 ,TPS 1500),RT99 只能做到 150ms ,并发数 200 ,TPS 1700 ,RT99 只能做到 200 左右,希望 RT99 压到 80ms 以内

    现调整了以下 tomcat 主要参数

    server: tomcat: threads: max: 200 min-spare: 200 processor-cache: 2000 max-connections: 2000 accept-count: 1 

    现在问题是无论如何调整后三个参数,RT99 都无法降下来,也尝试过线程数固定 100 ,pc150 ,mc150 ,ac500 ,RT 图相对稳定,但仍有一次较大的波动。

    请问一下这种情况如何优化 RT99

    8 条回复    2022-03-22 00:38:21 +08:00
    pkwenda
        1
    pkwenda  
       2022-03-21 22:49:54 +08:00
    既然看到了就给点半吊子的意见吧。。。
    期望的 80ms 内没给并发指标啊,比如想要 tps 达到 1500 ?

    docker 1C1G SpringBoot 项目,xmx 配置 2G 是什么意思

    一共 1G 内存,jvm 用一些,内嵌 tomcat 用一些,1 个 vus 代表一个线程,代表至少 1M 的内存占用,tomcat 应该默认 nio 了。

    vus 100 比 vus 200 快,100 对应 tps 600 多,200 对应 tps 1000 ,是不是说明压测的结论已经出来了:cpu 调度的能力在 100 - 200 之间,否则线程切换的效率,还不如 100 ,这样适当加 cpu 试试

    抛开并发数,单说代码优化的话,可以观察几个角度:
    1 、jdbc 层面有没有可能优化
    2 、日志是否是异步(不要小看同步日志的耗时)
    3 、一个 TPS 对应了 多少 QPS ,有没有可能优化。。

    另外你的压测机性能行么。。性能不行可以试试 K6 。。影响因素太多了
    zoharSoul
        2
    zoharSoul  
       2022-03-21 23:29:34 +08:00
    mysql 和 java 所在的服务互换一下

    java 用那个 1c1g 的, mysql 用 2c4g 的 试试
    night98
        3
    night98  
    OP
       2022-03-21 23:31:08 +08:00
    @pkwenda 补充一下,期望 RT99 80ms 内,tps1800 左右?

    然后 1c1g 是 mysql 的配置,买的单独的服务,应用机是 2c4g ,只跑了这一个服务,配置了 2g 内存
    按照您提供的意见,明天我调整到 4c4g 试试。看阿里云控制台 ecs cpu 峰值大概也才 70 左右,线程数估计是控制在 120-150 左右比较合适

    jdbc 连接池用的 HikariCP ,配置是 4 个连接,orm 用的 mybatis plus ,初期调优的时候把接口 A 的批量插入优化了一下,有小部分的提升。

    日志默认用的 springboot 的 logback ,打算把整体压到 80 再试试 log4j ,然后再试一下 log4j 全异步日志的性能差异,现在就是卡在 tomcat 线程池调优这块了。

    TPS/QPS 基本是 1:1 ,接口 A,B 都主要是插入或者更新操作。

    压测用的阿里的 PTS ,直接用他们的机器,单机封顶在 2000QPS ,这个可以调多点,不过试了下结果还是一样的,甚至延迟还高了一点。
    night98
        4
    night98  
    OP
       2022-03-21 23:32:38 +08:00
    @zoharSoul 哈哈,这个可以试一下,不过看 mysql 监控 cpu 一直没打满,尝试增加数据库连接池线程数反而性能更低,所以一直想先压榨出应用极限性能
    zoharSoul
        5
    zoharSoul  
       2022-03-21 23:39:03 +08:00
    @night98 #4 我的意思是性能瓶颈卡在数据库, 或者你看下链路追踪具体哪慢了, 针对性优化比较好解决.

    万一是 sql 耗时占 70%, 你在这逮着 Tomcat 使劲调也没必要不是
    night98
        6
    night98  
    OP
       2022-03-22 00:03:33 +08:00
    @zoharSoul 明天加个 skywalking 监控一下看看,现在用 jprofiler ,对性能影响比较大,有没有其他的推荐的?
    fallingg
        7
    fallingg  
       2022-03-22 00:35:56 +08:00 via iPhone
    调小 tomcat 线程数,2c 没有必要开这么多线程
    ericls
        8
    ericls  
       2022-03-22 00:38:21 +08:00 via iPhone
    先 benchmark, profile 再说
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3361 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 11:02 PVG 19:02 LAX 04:02 JFK 07:02
    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