Arthas技术原理-源码调试环境搭建


环境准备

源码下载

github 速度较慢,使用 gitee 的仓库

https://gitee.com/arthas/arthas

下载源码

git clone https://gitee.com/arthas/arthas.git

导入到 IDEA 中

源码基本模块
arthas源码模块截图
找几个核心的模块讲一下

  • 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 即可,如图

arthas插件示意图

安装后可以在 idea 中快捷生成 watch、trace 等常用的 arthas 命令,非常有用

Hello world

arthas 源码内,有一个用于演示的实例程序:math-game

在 idea 内 Debug 运行 Math-game,并添加 arthas 的断点

demo.MathGame#main

效果如下:
运行math-game效果图

在 idea 中运行 arthas-boot

1、运行 arthas-boot

注意:在idea中运行arthas-boot的时候,需要选择jdk8,否则会报错

java: 程序包sun.misc不存在

com.taobao.arthas.boot.Bootstrap#main
运行arthas-boot效果图

2、对 Math-game 的 jvm 进行远程调试
运行arthas进行调试

3、进入断点,表明源码环境搭建成功

进入attach的断点
4、尝试对 math-game 的函数进行 watch 操作

执行arthas命令
输出结果:

watch命令输出


文章作者: 王利康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王利康 !
  目录