跳至主要內容

Arthas

chanchaw大约 5 分钟languagejava

安装与部署

安装

官网

https://arthas.aliyun.com/doc/quick-start.htmlopen in new window

Windows

使用命令 curl -O https://alibaba.github.io/arthas/arthas-boot.jar 下载,得到文件 arthas-boot.jar 通过命令 java -jar arthas-boot.jar启动 arthas。启动时要求系统当前要有 java 项目在运行,否则会启动失败,提示使用 jps 查看 java 进程。要使用 jps 要求配置系统环境变量(JDK路径下的bin目录以及jre 下的 bin 目录)。 java 安装在默认路径 C:\Program Files\Java 的话还需要使用全路径指定 java,完整的命令是 "C:\Program Files\Java\jdk1.8.0_171\bin\java.exe" -jar arthas-boot.jar 运行后 arthas 会提示输入需要调试的进程的序号,回车进行调试。 第一次运行会在目录 C:\Users\Administrator 下的创建两个目录:.arthas 和 logs

Linux

linux 的安装方法和 windows里一样: curl -O https://alibaba.github.io/arthas/arthas-boot.jar 然后运行: java -jar arthas-boot.jar 检测到有 java 进程后提示输入序号进行绑定。第一次运行会在当前用户的home目录下创建名称为 .arthas 的目录 所以绝对路径是:~/.arthas 由于 linux 中以点开头表示隐藏目录,所以在当前用户的 ~ 目录下要使用命令 ls -a 查看所有目录。安装后在目录 /root/.arthas/lib/3.6.6/arthas下有文件 math-game.jar 用于演示 arthas 的使用,运行该 jar 后可 attach 到该进程进行演示性调试。

卸载

不管是上面的在线安装还是下载 zip 压缩包后的解压都是绿色软件,只要删除文件夹即可。即删除下面两个目录:

rm -rf ~/.arthas
rm -rf ~/logs/arthas

运行

端口占用

如果已经运行过一个 arthas 想要再次运行一个则需要修改运行端口

java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

web运行

也可以通过 web 运行 [http://127.0.0.1:3658/](http://127.0.0.1:3658/)

windows服务tomcat

绑定到 windows 系统下的安装为 windows 服务的 tomcat,不可 java -jar arthas-boot.jar要像下图 arthas01

使用与命令

技巧

在命令后面跟参数 -h 表示查看该命令的使用方法,参数的作用

命令

quit

退出当前 arthas 客户端,如果同一个进程有多个 arthas 附加,则不影响其他 arthas 客户端

stop

退出 arthas 服务端,所有客户端跟随退出

dashboard

arthas02
arthas02

输入q 或者 ctrl+c 退出当前仪表盘

thread

查看最繁忙的3个线程:thread -n 3 查看WAITING状态的所有线程:thread --state WAITING

arthas03
arthas03

jvm

显示项目含义介绍

arthas04
arthas04

watch

arthas05
arthas05

help

打印所有命令,介绍命令的使用

cat

打印文件内容

grep

使用方法例如:sysprop | grep java 查看系统信息时过滤只显示包含 java 的信息 显示信息时同时显示行号:sysprop | grep java -n 控制显示的最大行数:sysprop | grep java -m 10

arthas06
arthas06

sysprop

显示 jvm 状态信息 查看 java home 路径:sysprop java.home 修改显示的键值对:sysprop user.country US - 将当前服务器所属地区修改为 US

pwd

显示当前路径

reset

arthas07
arthas07

version

显示 arthas 版本号

history

显示执行过的 arthas 命令

keymap

显示 arthas 快捷键

sysenv

arthas08
arthas08

vmoption

arthas09
arthas09

getstatic

获取静态属性值

arthas10
arthas10

ognl

arthas11
arthas11

下面调用静态方法在 cmd 中显示的是返回值,不是方法执行的结果

arthas12
arthas12

sc - search class

查看加载的类的信息

arthas13
arthas13

sm - search method

查看加载的方法的信息

arthas14
arthas14

jad

反编译出源码。jad 命令后是:包名+入口类名称,语法介绍:

arthas15
arthas15
arthas16
arthas16

使用 jad + mc 可以实现程序的热更新效果

arthas17
arthas17

mc

Memory Compiler - 在内存中把源代码编译成字节码文件

redifine

把新生成的字节码文件在内存中执行

arthas18
arthas18

dump

arthas19
arthas19

classloader

arthas20
arthas20
arthas21
arthas21

monitor

arthas22
arthas22
arthas23
arthas23

watch

arthas24
arthas24
arthas25
arthas25
arthas26
arthas26
arthas27
arthas27

观察方法执行前后属性的变化,执行案例

arthas28
arthas28
arthas29
arthas29

trace

对方法内部执行逻辑进行跟踪,统计其中调用的其他方法的耗时,显示红色字体是耗时最大的方法

arthas30
arthas30
arthas31
arthas31

打印执行超过1ms的run方法的执行

arthas32
arthas32

stack

arthas33
arthas33

最简单使用案例

arthas34
arthas34

添加条件变量的跟踪

arthas35
arthas35

条件变量中使用耗时

arthas36
arthas36

tt

arthas37
arthas37
arthas38
arthas38
arthas39
arthas39

显示结果的解释:

arthas40
arthas40
arthas41
arthas41
arthas42
arthas42
arthas43
arthas43

cls - 清理屏幕

退出

arthas44
arthas44

option - arthas配置

cmd中输入 options查看下图的命令

arthas45
arthas45

案例

火焰图

启动:profiler start 列出命令 profiler支持的所有事件:profiler list 查看至今已经获取的样本数量:profiler getSamples 显示命令 profiler 已经运行的时长:profiler status 停止获取样本:profiler stop。执行该命令会自动生成默认格式是 svg 的图片 - 火焰图 如果要生成 html 格式的文件则:profiler stop --format htmlarthas46

arthas47
arthas47

火焰图含义:

arthas48
arthas48

使用总结

一般首先使用 trace 跟踪指定类的指定方法,查看最耗时的方法为目标方法。然后通过 watch 查看入参以及返回结果