1. thread
- thread可以查看线程相关信息
- 具体参数有:
- thread -n 3 指定最忙的3个线程并打印堆栈
- thread -b (block)查看阻塞其他线程的线程
- thread 线程id:查看线程id的线程信息
- thread -i 1000 -n 3 : 每1000毫秒,采样最繁忙的3个线程
- thread --state WAITING 查看所有WAITING状态的线程
2. jvm命令
- jvm命令可以查看jvm相关信息
3. sysprop命令
- sysprop:查看所有jvm属性,还可以修改属性
sysprop java.version
- 修改属性
sysprop user.country CN
4. sysenv
- sysenv:system environment variables,查看当前jvm的环境变量信息,无法修改
5. vmoption
- 查看,更新java虚拟机相关参数
- vmoption PrintGCDetails
- 修改:vmoption PrintGcDetails true(指定值即可)
6. getstatic
- 通过getstatic命令可以方便的查看类的静态属性
- getstatic 包名.类名 属性名
7. ognl
- 调用静态函数:
ogml '@java.lang.System@out.println("hello")'
# ongl '@类名@方法名(参数)'
- 获取静态类的静态字段
ognl '@demo.MyRandom@random'
# ongl '@静态类@静态方法'
- 执行多行表达式,赋值给临时变量,返回一个List
ognl '#value1=@System@getProperty("java.home"),#value2=@System@getProperty("java.runtime.name"),{#value1,#value2}'
8. sc
- sc:search class:搜索类,查看jvm已加载类的信息
sc demo.* :查看该包下的所有类
sc demo.* -d 查看类的详细信息
sc demo.* -df 不仅包含类的详细信息还包含类的成员变量
sc -e 用正则表达式匹配,默认用通配符匹配
9. sm
- 查看已经加载类的方法信息
sm java.lang.String
sm 类 -d 类中的方法的详细信息
10 jad
- 反编译,把字节码反编译成源代码
jad java.lang.String 反编译String 类
jad java.lang.String --source-only 只显示源码
jad java.lang.String trim 反编译String类中的trim方法
11 mc
- 在内存中把源代码编译成字节码文件
mc /root/hello.java -d /root/demo 将hello.java 文件编译到/root/demo目录下生成二进制文件
12 redefine
把新生成的字节码文件在内存中执行
redefine不能增加成员变量和方法,只能在现有的方法上进行修改
正在跑的函数,没有退出,就不会生效
redefine /root/demo/hello.class通过10、11、12 三个命令实现字节码反编译、替换字节码、让字节码重新作用到jvm
13. dump
- 将当前运行的类的字节码保存到指定目录,默认目录:/logs/arthas/classdump/
- dump 类名
- dump demo.* 使用正则表达式
14 classloader
- 获取类的加载信息,可以将jvm中所有的classloader的信息统计出来,并展示成继承树
- 可以通过classloader查找资源在那个目录下面,对于ResourceNotFoundException非常有用
- classloader:命令会返回所有类名字,每个类的实例数量,所有加载类的总数
- 主要命令
- classloader -l 与classloader差不多,增加了hashcode和parent类加载器,如果为null表示顶层加载器
- classloader -t 列出所有Classlader的继承树
- classloader -c hashcode -r xxx资源名,通过某个类加载器(arthas)查找对应资源在那个包里面
- classloader -c hashcode --load java.lang.String 通过类加载器加载某个类
15. monitor
- 监控指定类中方法的执行情况
- monitor -c 5 类名 方法名 每5秒监控一次类中的方法,主要包含:调用次数、调用成功量、调用失败量、rt、失败率
16. watch
- 观察方法的执行调用情况
- -b:在方法调用之前观察
- -e:在方法exception之后观察异常信息
- -s:在方法返回之后观察
- -f:在方法结束之后,观察finally
- -x:返回结果遍历深度 默认1
17 trace命令
- 对方法内部路径进行追踪,并输出方法路径上每个节点的耗时
18 stack
- 输出当前方法被调用的调用路径
19 tt
- time-tunnel时间隧道
- 记录指定方法每次调用入参和返回信息,并能对这些不同时间下调用的信息进行观测
- tt -t:记录某个方法在一段时间的调用
- tt -l 显示所有已经记录列表
- tt -n 次数 只记录次数
- tt -s 搜索表达式 对应表达式记录列表
- tt -i 索引号 指定索引号的内容