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

2019-04-19 21:33:13 +08:00
 snappyone

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

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

4741 次点击
所在节点    程序员
25 条回复
holyghost
2019-04-19 21:38:50 +08:00
jepsen 让你更强大
snappyone
2019-04-19 21:44:39 +08:00
@holyghost 去搜了下,这个好像是做测试用的,如果开发时候在 ide 里面 debug 好像不行
billlee
2019-04-19 21:49:02 +08:00
一般单步调试的时候都是在一个 jvm 里面加载所有模块的
reus
2019-04-19 21:53:06 +08:00
打印日志不仅不傻乎乎,还是正确的 debug 方法。很多分布式算法都很讲究时间,哪里能让你停下来的?
jokerlee
2019-04-19 22:33:48 +08:00
可以用 arthas 这种工具,不需要加断点
night98
2019-04-20 01:31:03 +08:00
第一种:timeout 设置永不超时
第二种:写个 aop 切 service 层方法出入参
limuyan44
2019-04-20 06:11:34 +08:00
大部分分布式都是靠日志
snappyone
2019-04-20 07:07:45 +08:00
@reus
@limuyan44 打 log 的问题就是做一个小修改得把系统重启一把,这个时间有点久
snappyone
2019-04-20 07:08:00 +08:00
@jokerlee Arthas 试了下,确实比 btrace 方便的感觉
zhangyp123
2019-04-20 08:11:22 +08:00
分布式调用链
tony601818
2019-04-20 08:31:39 +08:00
分布系统多打 log 是万金油,ide 里 debug 就只能伪分布了。
xuanbg
2019-04-20 08:32:00 +08:00
先靠日志确定问题点,一般如果抛异常,直接就能定位问题代码了。如果没有抛异常,不能确定具体是哪段代码出问题再上调试。
dazhangpan
2019-04-20 08:46:12 +08:00
分布式 tracing
coffeSlider
2019-04-20 09:14:20 +08:00
监控+log
tinybaby365
2019-04-20 09:50:58 +08:00
opentracing
v2dead
2019-04-20 10:27:30 +08:00
当年跟一条 log 连着跳了三四台机器跟踪过去,有一种名侦探狄人杰的感觉。
reus
2019-04-20 11:42:03 +08:00
@snappyone 这不是打日志的问题,是你的系统启动慢的问题
bruce00
2019-04-20 11:47:49 +08:00
只会用 print debug
cabing
2019-04-20 12:32:18 +08:00
找个 trace 工具啊。记录每次的调用链和参数。
snappyone
2019-04-20 17:49:46 +08:00
@reus 我们都是一些数据处理引擎跟分布式数据库所以确实不快,但是我感觉每次打 log 要重启多个系统,就算启动快也是大问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/556907

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX