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

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

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

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

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

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