一次Arthas线上排查问题经历

本文记录了一次使用Arthas在线上环境中排查问题的经历。问题源自更新的代码在正式环境无法正常工作。通过Arthas的trace、watch、jad等命令检查代码执行,最终发现是因为缺少一个实体类导致的问题。尽管类加载了,但没有抛出异常,Arthas的跟踪命令也没有显示出预期的执行逻辑。问题解决后,作者反思过于依赖工具而忽视了基础的排查方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一次Arthas线上排查问题经历

问题说明:测试环境中通过的代码更新到正式环境中无法使用。Athas线上跟踪代码执行顺序没有,却能从看出代码已经在执行了。
用到的命令:trace/watch/jad

两套系统,一套系统已经实现了的一个功能,需要部署到另一个系统上;这是一个较大的集群,是比较老旧的系统了,且用户量较大。每次全量更新都要通宵,因此只是先更新一台服务器,重启好验证功能正常之后再重启其他服务器。

一顿操作:

说明:有一台测试环境,经常全量更新,有最新代码,确认服务可用。

  • 拷贝jsp页面,相关图片,图标资源,确认可链接进去页面完全显示
  • 拷贝后端代码
  • 添加后端相关配置文件
  • 重启
  • 测试,完蛋,接口不返回数据。

接口设计时无论是否异常,都会有返回值。然而测试时却没有。

排查经历:

  1. 浏览器调用接口状态200 却无返回数据,说明类已经加载进去了。
  2. jad --source-only com…xxxController xxmethod(反编译xxx类下的xx方法),结果与本地代码一直,且也证明该类已被加载。
  3. 跟踪代码执行逻辑 trace com…xxxController xxmethod (线上看一个方法执行了那些逻辑)只输出Spring相关的一些内容。与测试环境输出不同
  4. watch com…xxxController xxmethod “{params,throwExp}” (查看方法的入参和异常),发现参数正常,未出现异常抛出;(trace 也可以查看日志输出
    4.上一步陷入了难以跨越的问题。本地线下代码查看执行日志,发现有个查询mongo语句执行时会输出只有该方法才能输出的日志。线上抓取相关日志测试,果然有查到数据
  5. Arthas验证一下,watch com…BaseMongoService getOne
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值