1.安装
linux: curl -o https://alibaba.github.io/arthas/arthas-boot.jar //是O不是零 浏览直接访问https://alibaba.github.io/arthas/arthas-boot.jar
在运行程序之前,需要运行一个java进程在内存种
java -jar arthas-boot.jar
按序号选择诊断的进程 选择序号回车
2.卸载
linux:
rm -rf ~/.arthas
rm -rf ~/logs/arthas
windows
C:\Users\admin\.arthas
C:\Users\admin\logs/arthas
3.启动demo
cd ~/.arthas/lib/3.6.7/arthas/
java -jar math-game.jar
启动
java -jar arthas-boot.jar
端口号被占用
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1
4.基础命令
exit/quit //退出不断开连
stop //停止完全退出
dashboard //打开虚拟机内存仪表板 q ctrl+c 都可以退出
=============================
dashboard 模块内容
ID //运行的所有线程
memory //内存使用情况
runtime //jvm运行状态
=============================
thread //查看线程
thread 1 //查看ID为1的线程信息
jad 包名.类名 //反编译
watch 包名.类名 方法名 返回值 //监测 watch demo.MathGame primeFactors returnObj
=======================
help //查看所有命令的帮助信息
cat //显示某个文件内容
cls //清屏
grep // 显示某个文件的字符串 参数:-n //显示行号 -i //忽略大小写查找 -m 行数 //最大显示行数 -e "正则表达式" //使用正则表达式查找
sysprop //显示所有信息
pwd //显示当前的工作目录路径
======================
session //查看当前会话的信息
reset 类名 //将arthas增强的类还原,服务器关闭所有增强也会重置 参数: 类名 *List 不带参数还原所有
version //加载当前artchas版本号
history // 显示所有的执行命令
keyma[ //展示所有快捷键
ctrl+c //终止当前命令
ctrl+z //挂起当前命令 bg/fg 重新支持此命令 或者kill掉
ctrl+a //回到行首
crtl+e //回到末尾
=====================
5.jvm 命令
dashboard //仪表板
thread //线程信息 参数:id //查看线程 -n 3 //查看当前最忙的几个线程 -b //找出当前线程阻塞其他线程的线程
-i 200 //指定cpu采样的时间间隔毫秒
--state waiting //查看所有等待的线程
jvm //查看JVM虚拟机信息
sysprop //查看和修改系统信息 sysprop KEY VALUE //修改 sysprop KEY //查看
=====================
sysenv //查看当前Java环境属性
vmoption //查看JVM虚拟机参数 vmoption KEY VALUE //修改 vmoption KEY //查看
getstatic 类名 属性 //查看静态的类和静态的属性 getstatic demo.MathGame random
ognl express -c -x //ognl 语法 express //执行的表达式 c: 执行表达式的类加载器,默认是系统类加载器 x num:结果对象展开层次
===========================
ognl '@demo.MathGame@random' //获取静态属性
ognl '#value1=@System@getProperty("java.home"),#value2=@System@getProperty("java.runtime.name"),{#value1,#value2}'
===========================
6.类和方法的命令
sc // 搜索类和子类支持模糊匹配 参数: 类名 方法名 -d //输出类的详细信息 -E //开启正则表达式匹配默认开启 -df //输出类的成员变量信息 sc demo.*/sc -df demo.*
sm //搜索类方法 参数: 类名 方法名 -d //输出方法的详细信息 -E //开启正则表达式匹配;默认开启 sm 类名
jad 全类名 [方法] //字节码文件反编译 -E //开启正则表达式匹配默认开启 jad --source-only demo.MathGame >/root/MathGame.java 编辑java 文件
mc 全路径/类名.java //源代码编译成字节码 -d 指定编译目录 //编译到 mc /root/MathGame.java -d /root
redefine 类名.class//把新生的字节码在内存中运行 redefine /root/demo/MathGame.class
======================
7.高级命令
dump //将已加载的字节码文件保存到 logs/arthas/classdump/
参数:类名
-c: 执行表达式的类加载器,默认是系统类加载器
-E //开启正则表达式匹配默认开启
dump java.lang.string
=========================
classload //获取类加载器信息
参数: -l /按类加载器进行统计
-t //打印所有类加载器继承树
-a //列出所有类加载器加载的类谨慎使用
-c hashcopde //找类加载器在哪个jar包
-c hashcopde
-r java.lang.string //获取某个资源在哪个jar包
-c hashcopde -load java.lang.string //加载一个类到内存中
========================
monitor //监视指定类中方法的执行情况
参数:类名 方法名
-E//开启正则表达式匹配;默认开启
-c 120 //统计周期 [c:],意思是统计周期(cycle of output),拥有一个整型的参数值 统计周期,默认值为120秒
monitor demo.MathGame primeFactors -c 5
==============================
watch //观察指定方法的调用情况
参数:类名class-pattern 方法名 method-pattern
express //观察表达式
condition-express //条件表达式
-b //方法调用之前观察
-e //方法异常之后观察
-s //方法返回之后观察
-f //方法结束之后观察
-E //正则
-x //指定输出结果属性遍历深度 默认1
-n 2 //执行次数
watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2
=============================
trace //对方法内部路径进行追踪 并输出方法路径每个节点耗时
参数:类名 方法名
condition-express //条件表达式
-n 2 //执行次数
-E //正则
'#cose' //耗时时间筛选
trace demo.MathGame primeFactors -n 2
trace --skipJDKmethod false demo.MathGame primeFactors -n 2 'cose>.5'
============================
stack //输出当前方法被调用的路径
参数:类名 方法名
condition-express //条件表达式
-n 2 //执行次数
-E //正则
============================
tt //时间隧道记录指定方法调用的入参和返回信息,并能对这些不同时间下调用的信息进行观测
参数: 类名 方法名
-t //记录某个方法在一段时间的调用
-l //显示所有已记录的列表
-n 次数 //只记录多少次
-s 表达式//搜索表达式
-i 索引号//查看指定索引号的详细调用信息
-p //重新调用指定索引号时间碎片
===========================
options //全局设置
===========================
profiler 命令 [命令参数]//火焰图 profiler start/list/getSamples/status/stop