V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luxinfl
V2EX  ›  程序员

tomcat 的 maxThreads 和 maxConnections 有没有建议值啊

  •  
  •   luxinfl · 146 天前 · 1491 次点击
    这是一个创建于 146 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个 8C32G 的服务器,部署了一个 springboot 服务,只有一个接口,这个接口执行时间正常大概 1ms 的样子(可能 1 毫秒都不到,接口具体逻辑就是往一个 LinkedBlockingQueue offer 数据,然后会有个定时任务把这个队列的数据写入 hbase )。经常每天都有>780ms 并且次数>100 的超时告警。

    现在默认设置是 maxThreads=200 maxConnections=10000 ,我在想是不是可以调大一点线程数,因为看了 cpu 和内存占用都蛮低的。 有看过一个帖子说 1C4G 建议 200 并发,4C8G 建议 800 并发。。

    暂时没有 tomcat 运行时的日志信息,还没打印,有什么手段可以排查这个高时延么。接口每天大概 2.7 亿调用量。

    第 1 条附言  ·  145 天前
    还发现一个奇怪的状况,我在测试环境压测,activeCount 还没到核心线程池的数量,然后队列就已经有数据了,这是个什么情况。按理说没到核心线程数队列不改有数据。是打印日志那一刻有问题么。。
    17 条回复    2023-01-10 09:18:52 +08:00
    roundgis
        1
    roundgis  
       146 天前 via Android
    換用 g1gc 看看
    xxfye
        2
    xxfye  
       146 天前 via Android
    首先要判断一下,这个超时是哪方面的超时?
    是线程池不够来引起的?扩大线程池。
    还是垃圾回收引起的?换 G1 或 ZGC 。
    还是是队列被阻塞引起的?换队列实现,或者用 ThreadLocal 多队列。
    oldshensheep
        3
    oldshensheep  
       146 天前 via Android
    用 java19 virtual thread 。。。
    开玩笑的,因为你还不知道为什么超时,可以参考楼上的。我觉得应该是队列的问题,可能满了。
    securityCoding
        4
    securityCoding  
       145 天前 via Android
    最高 qps 呢
    FrankAdler
        5
    FrankAdler  
       145 天前 via iPhone
    一毫秒的意思就是一个线程 1 秒能处理 1000 个请求,每天 2.7 亿平均一秒 3k ,算上峰谷不等,我觉得你线程数开 10 个就够了
    所以我建议你学学怎么排查慢请求
    imv2er
        6
    imv2er  
       145 天前
    极极极大概率是没及时写入 hbase ,queue 满了 和 tomcat 无关
    luxinfl
        7
    luxinfl  
    OP
       145 天前
    @xxfye 怀疑是 tomcat 的默认设置的问题,这个要等部署后才能看到线程池的运行信息。
    垃圾回收都是默认设置的,这个问题不大。
    队列阻塞应该不会,因为用的 offer 方法存数据,不存在锁,存不进去直接丢弃了。
    luxinfl
        8
    luxinfl  
    OP
       145 天前
    @securityCoding 应该有七八千吧
    luxinfl
        9
    luxinfl  
    OP
       145 天前
    @imv2er queue 满了的话,接口会直接返回不阻塞。
    yc8332
        10
    yc8332  
       145 天前
    不是说开越多越快。
    luxinfl
        11
    luxinfl  
    OP
       145 天前
    @FrankAdler 没啥头绪啊。。。。
    securityCoding
        12
    securityCoding  
       145 天前
    大概率是 gc 引起的,重点查这个方向
    Vaspike
        13
    Vaspike  
       145 天前
    推荐 Spring boot admin 这个 actuator
    tianmalj0613
        14
    tianmalj0613  
       145 天前
    服务接入一下 prometheus ,或者其他监控工具,把系统的指标存下来才能定量定性分析。
    有数据之后,用 UI 工具,比如 grafana 展示成图表就知道问题了
    Chinsung
        15
    Chinsung  
       145 天前
    看这个描述,看下内存使用情况,大概率是 GC 导致的
    angryfish
        16
    angryfish  
       145 天前
    缺相关监控很难直接判断,安照经验应该大概率是 full GC 了
    luxinfl
        17
    luxinfl  
    OP
       144 天前
    @securityCoding
    @Chinsung
    @angryfish
    我用 jstat 看了下,还真是,咋测的时候一秒一次 ygc ,大概停顿 10 几毫秒的样子
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   755 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 22:22 · PVG 06:22 · LAX 15:22 · JFK 18:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.