一次Arthas线上排查问题经历
问题说明:测试环境中通过的代码更新到正式环境中无法使用。Athas线上跟踪代码执行顺序没有,却能从看出代码已经在执行了。
用到的命令:trace/watch/jad
两套系统,一套系统已经实现了的一个功能,需要部署到另一个系统上;这是一个较大的集群,是比较老旧的系统了,且用户量较大。每次全量更新都要通宵,因此只是先更新一台服务器,重启好验证功能正常之后再重启其他服务器。
一顿操作:
说明:有一台测试环境,经常全量更新,有最新代码,确认服务可用。
- 拷贝jsp页面,相关图片,图标资源,确认可链接进去页面完全显示
- 拷贝后端代码
- 添加后端相关配置文件
- 重启
- 测试,完蛋,接口不返回数据。
接口设计时无论是否异常,都会有返回值。然而测试时却没有。
排查经历:
- 浏览器调用接口状态200 却无返回数据,说明类已经加载进去了。
- jad --source-only com…xxxController xxmethod(反编译xxx类下的xx方法),结果与本地代码一直,且也证明该类已被加载。
- 跟踪代码执行逻辑 trace com…xxxController xxmethod (线上看一个方法执行了那些逻辑)只输出Spring相关的一些内容。与测试环境输出不同
- watch com…xxxController xxmethod “{params,throwExp}” (查看方法的入参和异常),发现参数正