环境准备
源码下载
github 速度较慢,使用 gitee 的仓库
https://gitee.com/arthas/arthas
下载源码
git clone https://gitee.com/arthas/arthas.git
导入到 IDEA 中
源码基本模块
找几个核心的模块讲一下
- arthas-agent
比较简单,就两个类- AgentBootstrap:核心入口类(动态 attach 到目标 jvm 的入口)
- ArthasClassloader:自定义的类加载器,为了实现 arthas 中依赖的类库与目标 jvm 中的隔离
- arthas-common
- arthas-core
使用java -jar arthas-boot.jar 的方式启动 arthas,就会使用此模块中的Bootstrap 方法,进而启动一系列的动作
- arthas-client
客户端,即输入命令、执行 arthas 操作的客户端,基于 netty 实现了网络通信的功能
- arthas-spy
用于对目标 JVM 进行插装的接口,仅一个类;在运行时会依附到目标 jvm 的进程中,并存在目标进程的 classloader 内
- math-game
一个简单的计算大数分解的程序,用于演示 arthas 的功能
模块的依赖关系
IDEA 的 arthas 插件
插件名称:arthas idea
搜关键字 arthas 即可,如图
安装后可以在 idea 中快捷生成 watch、trace 等常用的 arthas 命令,非常有用
Hello world
arthas 源码内,有一个用于演示的实例程序:math-game
在 idea 内 Debug 运行 Math-game,并添加 arthas 的断点
demo.MathGame#main
效果如下:
在 idea 中运行 arthas-boot
1、运行 arthas-boot
注意:在idea中运行arthas-boot的时候,需要选择jdk8,否则会报错
java: 程序包sun.misc不存在
com.taobao.arthas.boot.Bootstrap#main
2、对 Math-game 的 jvm 进行远程调试
3、进入断点,表明源码环境搭建成功
4、尝试对 math-game 的函数进行 watch 操作
输出结果: