分布式系统的正确 debug 姿势求解 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
snappyone
V2EX    程序员

分布式系统的正确 debug 姿势求解

  •  
  •   snappyone 2019 年 4 月 19 日 5660 次点击
    这是一个创建于 2458 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在接手的一个算比较大型的分布式系统,一起有 4,5 个大模块,每个模块都是一个独立的 jvm,互相依赖。在 idea 中 debug 发现一旦时间过长就会各种 connection timeout,heart beat 超时,导致不得不重启系统,或者傻乎乎得打印日志。

    尝试过修改一些心跳包的超时参数,但是因为刚接手不是很熟悉,外加很多地方参数甚至需要代码层面修改,感觉不仅麻烦而且容易出问题,所以想请教下有什么比较好的 debug 姿势,目前尝试了 btrace,可以注入一些方法进行参数的打印,但是还是不够方便,大神们有没有什么好的方法求指教

    25 条回复    2019-04-21 11:21:16 +08:00
    holyghost
        1
    holyghost  
       2019 年 4 月 19 日 via iPhone
    jepsen 让你更强大
    snappyone
        2
    snappyone  
    OP
       2019 年 4 月 19 日
    @holyghost 去搜了下,这个好像是做测试用的,如果开发时候在 ide 里面 debug 好像不行
    billlee
        3
    billlee  
       2019 年 4 月 19 日
    一般单步调试的时候都是在一个 jvm 里面加载所有模块的
    reus
        4
    reus  
       2019 年 4 月 19 日
    打印日志不仅不傻乎乎,还是正确的 debug 方法。很多分布式算法都很讲究时间,哪里能让你停下来的?
    jokerlee
        5
    jokerlee  
       2019 年 4 月 19 日 via Android
    可以用 arthas 这种工具,不需要加断点
    night98
        6
    night98  
       2019 年 4 月 20 日
    第一种:timeout 设置永不超时
    第二种:写个 aop 切 service 层方法出入参
    limuyan44
        7
    limuyan44  
       2019 年 4 月 20 日 via Android
    大部分分布式都是靠日志
    snappyone
        8
    snappyone  
    OP
       2019 年 4 月 20 日
    @reus
    @limuyan44 打 log 的问题就是做一个小修改得把系统重启一把,这个时间有点久
    snappyone
        9
    snappyone  
    OP
       2019 年 4 月 20 日
    @jokerlee Arthas 试了下,确实比 btrace 方便的感觉
    zhangyp123
        10
    zhangyp123  
       2019 年 4 月 20 日
    分布式调用链
    tony601818
        11
    tony601818  
       2019 年 4 月 20 日
    分布系统多打 log 是万金油,ide 里 debug 就只能伪分布了。
    xuanbg
        12
    xuanbg  
       2019 年 4 月 20 日
    先靠日志确定问题点,一般如果抛异常,直接就能定位问题代码了。如果没有抛异常,不能确定具体是哪段代码出问题再上调试。
    dazhangpan
        13
    dazhangpan  
       2019 年 4 月 20 日   1
    分布式 tracing
    coffeSlider
        14
    coffeSlider  
       2019 年 4 月 20 日 via Android
    监控+log
    tinybaby365
        15
    tinybaby365  
       2019 年 4 月 20 日
    opentracing
    v2dead
        16
    v2dead  
       2019 年 4 月 20 日
    当年跟一条 log 连着跳了三四台机器跟踪过去,有一种名侦探狄人杰的感觉。
    reus
        17
    reus  
       2019 年 4 月 20 日
    @snappyone 这不是打日志的问题,是你的系统启动慢的问题
    bruce00
        18
    bruce00  
       2019 年 4 月 20 日 via iPhone
    只会用 print debug
    cabing
        19
    cabing  
       2019 年 4 月 20 日
    找个 trace 工具啊。记录每次的调用链和参数。
    snappyone
        20
    snappyone  
    OP
       2019 年 4 月 20 日
    @reus 我们都是一些数据处理引擎跟分布式数据库所以确实不快,但是我感觉每次打 log 要重启多个系统,就算启动快也是大问题
    version
        21
    version  
       2019 年 4 月 20 日
    ide 的那些 debug 断点都是骗人的..提高不了效率.
    真正的调试是代码的日志 log.没别的.这个是以前开发留给你的坑.
    snappyone
        22
    snappyone  
    OP
       2019 年 4 月 20 日
    @version 为什么这么说呢,个人感觉如果是单体应用用 debug 断点配合合适的 log 应该更方便吧
    autogen
        23
    autogen  
       2019 年 4 月 20 日
    打 log
    version
        24
    version  
       2019 年 4 月 21 日
    @snappyone 服务器接口应用层不能用 debug 断点了..如果你是单应用 web 或者 app 就无所谓..如果分布式和 rpc 应用.或者游戏..只能通过 log 日志来判定..这种调试方式是等于线上排查了.所以不能按本地的调试方式.因为很多情况你单机自己跑是模拟不出来的了...所以 log 排查是唯一靠谱的..因为你 debug 断点阻塞了.所以 timeout 很正常
    tedzhou1221
        25
    tedzhou1221  
       2019 年 4 月 21 日
    我觉得可以像#5 所说的,用 arthas,想在那个机器上打印日志都行,也不用在代码提前写打日志代码
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2618 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:08 PVG 14:08 LAX 22:08 JFK 01: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