在日常工作中我们经常会遇到一些线上异常的情况由于环境和数据不一样在本地和测试环境根本没办法复现,而且线上也没有输出日志,如果遇到这种情况我们往往要怎么去解决呢?
常规做法
如果实在遇到上面的情况,在本地和测试都无法复现,那最常规的做法就是拉个线上分支的版本,增加一些调试日志,然后再重新发布版本进行调试。运气好加一次日志就可以找到问题,运气不好的话可能还要发布好几次才能定位到问题。
高级做法
下载安装 arthas
Arthas 是阿里开源的一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
上面的 Arthas 这款工具的官方介绍,从中我们可以看到这个工具可以查看方法的出入参,异常以及监测方法的耗时,我们排查问题的时候最重要的就是想知道一些方法的入参和返回,有了入参和返回的数据我们就可以模拟出具体的场景从而解决线上的问题。
注意这里说的方法不单单是外层的接口方法,任何 Service 层或者 RPC 层的方法都是可以的。之所以提出这一点是因为很多时候线上的接口都会有请求和结果的日志记录,但是并没有内部某个具体方法的入参和返回,而通过 Arthas 我们可以监控任何方法的入参和返回值。
我们可以在 https://github.com/alibaba/arthas/releases 这个地址上下载具体的版本,下载下来就可以用,没什么难度。接下来阿粉通过一个案例来带大家使用一