# Arthas 阿尔萨斯
ls -a 查看隐藏文件夹
退出 quit exit 停止 stop
# 1 安装
#安装
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar 启动
#查看占用的端口
netstat -anp | grep 9082
#查看进程详情
ps -ef | grep 29119
#杀死进程
kill -9 29119
#换端口号
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1
#安装位置
/root/.arthas/lib/3.5.0/arthas
#数学游戏demo
java -jar arthas-demo.jar
# 2 attach一个进程 (关联选择的进程)
如果无法attach进程,可以查看日志/root/logs/arthas
# 4 基础命令 1
help 查看命令帮助信息
cat 查看文件内容
grep 只能用于管道命令
参数: -n 显示行号
-i 忽略大小写
-m 行数 显示最大行数 -m10
-e 正则表达式
pwd 当前所在工作目录
cls 清屏 (windows的命令)
# 5 基础命令 2
session 查看会话信息
reset 重置增强类
version 当前arths版本
history 输入过的所有命令
quit 退出当前客户端
keymap 键盘映射

# 6 jvm相关命令 1
dashboard仪表板
thread 查看所有正在运行的线程
jvm 虚拟机相关
sysprop 系统属性相关
1 dashboard

2 thread 查看所有线程
thread 1 查看id为1的线程
参数: -n thread -n 3 显示最忙的3个线程
-b 查看死锁
-i thread -i 1000 -n 3 每1000毫秒显示最忙的3个线程
--state thread --state WAITING 查看所有等待的线程
3 jvm
4 sysprop
# 7 jvm相关命令 2
sysenv 查看环境变量
vmoption 虚拟机选项
getstatic 查看类的静态属性 getstatic 类名 属性名
ognl 替代getstatic

# 8 class/classloader 相关命令1
sc 查找类 Search Class
sm 查找方法 Search Method
# 9 class/classloader 相关命令2
jad 把字节码反编译源码
mc 在内存中把源码编译成字节码文件
redefine 把新生成的字节码文件在内存中执行
jad --source-only demo.MathGame 只显示源码
dump 将正在运行的程序的字节码文件保存 /logs/arthas/classdump
classloader 获取类加载器的信息 某个类加载器在哪个jar包 资源在哪个jar包
# monitor
# 监控指定类中方法的执行情况 默认120s返回一次
# 5秒返回一次执行情况
monitor demo.MathGame primeFactors -c 5

# watch
# 观察指定方法的调用情况

# 执行primeFactors方法的出参和返回值,结果属性遍历深度为2
watch demo.MathGame primeFactors "{params,returnObj}" -x 2

# -b 方法执行前,所以返回为null
watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b

#方法运行前看方法的对象
watch demo.MathGame primeFactors "target" -x 2 -b

#查看方法的对象的某个属性
watch demo.MathGame primeFactors "target.illegalArgumentCount" -x 2

#方法调用前,调用后,只执行两次
watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2

# 输出小于0的情况
watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0"

# trace
# 对方法内部调用路径进行追踪,并输出方法路径的每个节点上耗时
#对run方法进行追踪
trace demo.MathGame run

#对run方法进行追踪 -n 2 获取两次,--skipJDKMethod 显示执行方法
trace --skipJDKMethod false demo.MathGame run -n 2

#执行耗时大于1毫秒的 0.5毫秒写 .5
trace demo.MathGame run '#cost > 1'

# stack
# 输出当前方法被调用的调用路径
#primeFactors方法的调用路径
stack demo.MathGame primeFactors

#primeFactors方法的第0个参数的值小于0,获取2次 耗时也可以查询
stack demo.MathGame primeFactors 'params[0]<0' -n 2

# tt 时间隧道
# 记录指定方法每次调用的入参和返回信息

#查询方法的调用和返回信息
tt -t demo.MathGame primeFactors


tt -l 查看所有的记录
# options 全局开关


# profiler 火焰图
profiler start 启动 profiler list 查看支持的事件 profiler getSamples 获取的样本 profiler status 获取状态 profiler stop 停止,并输出.svg图

X轴越长,代表使用的越多,Y轴是调用堆栈信息,顶部是正在执行的函数,下方是父函数
# 实战
查询哪个耗时最多

2 对耗时方法进行反编译 只显示源码

3 查询方法的返回值

4 查询controller 的入参和返回值,2个深度
watch com.controller.* * '{params,returnObj}' -x 2


trace 追踪最耗时的 jad 反编译 watch 用来监视每个方法的参数和返回值
java →