现在接手的一个算比较大型的分布式系统,一起有 4,5 个大模块,每个模块都是一个独立的 jvm,互相依赖。在 idea 中 debug 发现一旦时间过长就会各种 connection timeout,heart beat 超时,导致不得不重启系统,或者傻乎乎得打印日志。
尝试过修改一些心跳包的超时参数,但是因为刚接手不是很熟悉,外加很多地方参数甚至需要代码层面修改,感觉不仅麻烦而且容易出问题,所以想请教下有什么比较好的 debug 姿势,目前尝试了 btrace,可以注入一些方法进行参数的打印,但是还是不够方便,大神们有没有什么好的方法求指教
1
holyghost 2019-04-19 21:38:50 +08:00 via iPhone
jepsen 让你更强大
|
3
billlee 2019-04-19 21:49:02 +08:00
一般单步调试的时候都是在一个 jvm 里面加载所有模块的
|
4
reus 2019-04-19 21:53:06 +08:00
打印日志不仅不傻乎乎,还是正确的 debug 方法。很多分布式算法都很讲究时间,哪里能让你停下来的?
|
5
jokerlee 2019-04-19 22:33:48 +08:00 via Android
可以用 arthas 这种工具,不需要加断点
|
6
night98 2019-04-20 01:31:03 +08:00
第一种:timeout 设置永不超时
第二种:写个 aop 切 service 层方法出入参 |
7
limuyan44 2019-04-20 06:11:34 +08:00 via Android
大部分分布式都是靠日志
|
10
zhangyp123 2019-04-20 08:11:22 +08:00
分布式调用链
|
11
tony601818 2019-04-20 08:31:39 +08:00
分布系统多打 log 是万金油,ide 里 debug 就只能伪分布了。
|
12
xuanbg 2019-04-20 08:32:00 +08:00
先靠日志确定问题点,一般如果抛异常,直接就能定位问题代码了。如果没有抛异常,不能确定具体是哪段代码出问题再上调试。
|
13
dazhangpan 2019-04-20 08:46:12 +08:00 1
分布式 tracing
|
14
coffeSlider 2019-04-20 09:14:20 +08:00 via Android
监控+log
|
15
tinybaby365 2019-04-20 09:50:58 +08:00
opentracing
|
16
v2dead 2019-04-20 10:27:30 +08:00
当年跟一条 log 连着跳了三四台机器跟踪过去,有一种名侦探狄人杰的感觉。
|
18
bruce00 2019-04-20 11:47:49 +08:00 via iPhone
只会用 print debug
|
19
cabing 2019-04-20 12:32:18 +08:00
找个 trace 工具啊。记录每次的调用链和参数。
|
20
snappyone OP @reus 我们都是一些数据处理引擎跟分布式数据库所以确实不快,但是我感觉每次打 log 要重启多个系统,就算启动快也是大问题
|
21
version 2019-04-20 20:51:18 +08:00
ide 的那些 debug 断点都是骗人的..提高不了效率.
真正的调试是代码的日志 log.没别的.这个是以前开发留给你的坑. |
23
autogen 2019-04-20 22:30:17 +08:00
打 log
|
24
version 2019-04-21 00:41:32 +08:00
@snappyone 服务器接口应用层不能用 debug 断点了..如果你是单应用 web 或者 app 就无所谓..如果分布式和 rpc 应用.或者游戏..只能通过 log 日志来判定..这种调试方式是等于线上排查了.所以不能按本地的调试方式.因为很多情况你单机自己跑是模拟不出来的了...所以 log 排查是唯一靠谱的..因为你 debug 断点阻塞了.所以 timeout 很正常
|
25
tedzhou1221 2019-04-21 11:21:16 +08:00
我觉得可以像#5 所说的,用 arthas,想在那个机器上打印日志都行,也不用在代码提前写打日志代码
|