Arthas 是Alibaba开源的Java诊断工具,主要解决以下问题:

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

今天我们主要使用Arthas的请求追踪、反编译以及接口参数监控。

一、Arthas的下载。

  1、先从官方git地址https://github.com/alibaba/arthas/blob/master/README_CN.md下载Arthas的jar包,然后执行java -jar 运行该jar包。如果觉得官网下载慢也可以直接在我分享的百度云盘中下载(链接: https://pan.baidu.com/s/1sTyU03uSUObOxtW4RkPkNw&shfl=shareset 提取码: drw1 )

二、Arthas的启动。

  Arthas启动的前提是要启动你的java项目,因为Arthas启动时会自动扫描机器上运行的java项目,如下图

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

三、常用命令

  1、sc 命令,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

  比如sc -d 打印该类的详细信息

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

  2、trace 命令,方法内部调用路径,并输出方法路径上的每个节点上耗时,可以使用该命令来检测接口里那一步耗时较多。注意:每次只能跟踪一级方法的调用链路。

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

  这时只需要调用接口就行,如下:

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

  继续追踪getLaboratoryRelationship这个接口,查看里面方法的具体耗时:

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

四、watch命令,该命令能方便的观察到指定方法的调用情况。能观察到的范围为:返回值抛出异常入参。

阿里JAVA诊断工具Arthas的初步使用-LMLPHP

当然这只是Arthas的一小部分功能,如果还需要更详细的介绍,请移步官方API文档https://alibaba.github.io/arthas/index.html

  

05-11 20:18