前段时间在调一个线上缺陷,测试环境无法复现该问题,只有生产环境出现这个问题。推测最可能原因:

数据问题:生产环境数据量比测试环境大很多、生产环境某些数据出错。

此问题是导出excel表格的问题。由于测试环境无法复现,只能在代码里可能的地方都加上输出标志,看看问题出在哪里。由于代码涉及到很多方法,于是乎反反复复加了日志信息,然后又打包成jar文件放进生产里的classes里面重启服务,来来回回尝试了无数次终于定位到问题所在点了。

后来,我觉得这个办法实在太过笨拙,本来计算机能够完成能够检测得到的问题,居然用手工来寻找定位问题所在点,而这个过程极其耗时,却又必不可少,非常关键。我在想能不能开发一个用于检测追踪程序运行过程中走过的路径这样的工具用于定位问题发生点呢。一直在想着,这样的开发应该不会很难。

不过,今天居然发现这样的工具已经被别人开发出来了,这就是------Arthas。

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

想学习从这里开始,→https://github.com/alibaba/arthas/blob/master/README_CN.md