0%

arthas

1. 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 安装
curl -L https://alibaba.github.io/arthas/install.sh | sh

# 卸载
## 相关 jar 包放在 ` ~/.arthas/` 下
rm -rf ~/.arthas/

# 启动
## 当前版本 3.0.4, 服务启动需要 JDK-8 | JDK-9 , 暂不支持 JDK-10
## ./as.sh -h 可以查看帮助文档
## 启动日志在 ~/logs/arthas/arthas.log
## 本地连接可直接输入命令
./as.sh
## 远程连接可使用
# PID: 目标 Java 进程 ID(请确保执行当前执行命令的用户必须有足够的权限操作对应的 Java 进程)
# IP: Arthas Server 侦听的地址, 默认值是 127.0.0.1. Arthas允许多个用户同时访问, 并且各自的命令不会相互干扰执行
# PORT: 目标服务器 Arthas Server 的端口号, 默认的端口号是 3658
./as.sh <PID>@[IP:PORT]

# 模糊搜索类
sc *$class_name

# 查看类中有哪些方法
sm $full_class_name

# 查看方法被调用的情况
# -x n 输出的对象结构深度
# -b 在方法调用之前观察
# -s 在方法返回之后观察
# -e 在方法异常之后观察
# -f 在方法结束之后(正常返回和异常返回)观察, 默认打开
watch $full_class_name $method_name "{params,target,returnObj}" -x 2 -b -s

# 追踪调用链路, 并统计执行时间
# -j 过滤掉jdk的函数
# '#cost > 10' 根据调用耗时过滤
trace -j $full_class_name $method_name '#cost > 10'

# 退出
## Attach到目标进程上的arthas还会继续运行, 端口会保持开放, 下次连接时可以直接连接上.
## exit 效果同 quit
quit
## 完全退出
## **如果没有完全退出, 下次登录会重新进入之前的进程, 而参数的<PID>不起作用**
shutdown

2. FAQ

2.1. Error during processing the command: null

出现该提示, 表示 java-agent 冲突了
已经存在其他使用 java-agent 配置了, 导致 arthas 无法 trace, watch.

如果要 arthas 正常使用, 必须禁止其他 java-agent 存在

3. Resource