• 请不要在回答技术问题时复制粘贴 AI 生成的内容
luxinfl
V2EX  ›  程序员

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

  •  
  •   luxinfl · Jan 8, 2023 · 3045 views
    This topic created in 1401 days ago, the information mentioned may be changed or developed.

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

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

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

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