Java 中 CountDownLatch 的 await 方法返回超时问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
chenfang

Java 中 CountDownLatch 的 await 方法返回超时问题

  •  
  •   chenfang 2023 年 10 月 10 日 1605 次点击
    这是一个创建于 927 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们公司系统是一个 Tomcat 集群,每个 tomcat 最高接受 1000 的并发,不过目前应该没有这么多也就 300 左右,

    在 tomcat 接到请求之后,每个请求会再发送几个请求给不同的下游服务,然后主线程使用 public boolean await(long timeout, TimeUnit unit)等待请求完成,这里会根据算出来一个超时时间,防止 response 超时,但是实际的等待时间会比设置的时间多 50-100 毫秒(目前没有统计超过的占比数据,保守估计超时占比在 5%以下)

    因为流量比较大,一天经过这个 await 方法的次数应该不到 60 亿(tomcat 数量不少),所以这种超时总量其实是不少的,能优化一点是一点(同时也能提升自己的技术水平)

    上图是我问了 ChatGPT 之后,以我现在的知识水平来讲,我觉得是 GC 导致的,于是我看了其中一个 tomcat 的 GC 情况

    我们目前使用的是 openJDK17,G1 的垃圾回收器,以及一些虚拟机参数应该也很久不变了(我认为是有优化空间的),比如 jkd17 是有 ZGC 的,之前查看 ZGC 的 world stop 时间会减少很多

    验证是否是 GC 导致的方法,我想到的是记录 await 超时的时间戳和不超时的时间戳,分开统计,然后再记录 GC 的开始时间和结束时间,查看在 GC 这个时间段内的是否超时的时间戳占比大,这种验证方法可行么?

    最后有大佬遇到过这种问题么?或者有没有别的思路解决这个问题

    6 条回复    2023-10-11 16:12:17 +08:00
    cubecube
        1
    cubecube  
       2023 年 10 月 10 日
    除了你说的这种情况,更大的可能是调度延迟,你线程数太多了,核心数太少,该超时的时候,调度不上去
    ikas
        2
    ikas  
       2023 年 10 月 10 日
    只是靠这些,没法分析.

    一般都是上指标监控,搭建一个 Promethues,grafana . 然后接口接加上指标统计..搭配 jvm gc,系统 cpu 等指标一起分析
    chenfang
        3
    chenfang  
    OP
       2023 年 10 月 10 日
    @cubecube 我也怀疑过这种,但是我看 cpu 并不高才 30%+,或者调度延迟并不跟 cpu 负载有关系?
    chenfang
        4
    chenfang  
    OP
       2023 年 10 月 10 日
    @cubecube 你指的核心数是指硬件么?
    chenfang
        5
    chenfang  
    OP
       2023 年 10 月 11 日
    捞一捞 我的帖子..
    arloor
        6
    arloor  
       2023 年 10 月 11 日
    @chenfang 线程开太多的话,会反应在 cpu load 上,cpu busy 可能并不会太高。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2815 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 12:08 PVG 20:08 LAX 05:08 JFK 08:08
    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