线上定位问题出问题了,异常堆栈打出来了(异常打印了还好,有时候遇到坑的连异常都不给打也是很常见),但还是不知道具体问题是什么,是不是很抓狂?
这时候就需要把一些变量的值打印出来看是不是符合预期了。线下随便你弄,但是线上加日志分析问题就意味着需要停止服务,这个可不是说停就停的。
现在Arthas来了,可以帮助你解决这个苦恼的问题。Arthas可不是魔兽的那个阿尔萨斯,而是Alibaba开源的Java诊断工具。
Arthas
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
常用watch命令查看入参和返回值
上面都是Arthas可以解决的问题,但是解决我最大的问题就是之前老是通过加日志,重新打包发布去定位问题(以前是做一个产品部署到客户那里,一般停服务都需要报备然后申请,到晚上才能重新发布,真是个苦恼的事情,关键是还容易失去客户的信任)。有了Arthas就没有这个苦恼了,不用加日志也能看到方法调用的入参、返回值了。Arthas的命令就是wath可以让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参。
总结
这里我就是给大家认识到线上遇到问题的时候可以想到Arthas,这里说再多也没有官方详细。
Arthas的官方文档很详细,大家有需要可以直接去官方文档查询 https://alibaba.github.io/arthas/