前言
Arthas是什么?Arthas是阿里开源的在线诊断工具。Arthas 是基于 Greys 进行二次开发的全新在线诊断工具,利用Java6的Instrumentation特性,动态增强你所指定的类,获取你想要到的信息, 采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,让你在定位、分析诊断问题时看每一个操作都看起来是那么的简明。
Arthas解决的痛点:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在预发 debug 一下,难道只能通过加日志再重新预发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现,怎么办?
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到容器和中间件的实时运行状态?
简单使用
启动
参考官网文档给出的启动方式:
Use arthas-boot(Recommend)
Downloadarthas-boot.jar,Start with java command:
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
还可用.sh脚本运行:
Use as.sh
You can install Arthas with one single line command on Linux, Unix, and Mac. Pls. copy the following command and paste it into the command line, then press Enter to run:
curl -L https://alibaba.github.io/arthas/install.sh | sh
这里我采用第一种方式启动。
常用命令
下面来简单尝试一下arthas的命令,官方给出了命令大全。
- dashboard
当前系统的实时数据面板
- thread
查看当前 JVM 的线程堆栈信息
- jvm
查看当前 JVM 的信息
- sc
查看JVM已加载的类信息
- sm
查看已加载类的方法信息
- jad
反编译指定已加载类的源码
- classloader
查看classloader的继承树,urls,类加载信息,使用classloader去getResource
- monitor
方法执行监控
- watch
方法执行数据观测
- trace
方法内部调用路径,并输出方法路径上的每个节点上耗时
- stack
输出当前方法被调用的调用路径
- tt
方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
- reset
重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
- quit
退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
- shutdown
关闭 Arthas 服务端,所有 Arthas 客户端全部退出
dashboard
盗用官方的一张图来解释一下:
ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应
NAME: 线程名
GROUP: 线程组名
PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
STATE: 线程的状态
CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
TIME: 线程运行总时间
INTERRUPTE: 线程当前的中断位状态
DAEMON: 是否是daemon线程
…