Arthas常用命令

基础命令

命令含义
help查看命令帮助信息
cls清空当前屏幕区域
session查看当前会话的信息
reset重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
version输出当前目标 Java 进程所加载的 Arthas 版本号
history打印命令历史
quit退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
stop和shutdown命令一致
shutdown关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymapArthas快捷键列表及自定义快捷键
options查看或设置Arthas全局开关

Class相关

SC 查看JVM已加载的类信息

参数名称参数说明Demo
<class-pattern>类名表达式匹配sc demo.*
-x, --expand <value>展开层次
-E, --regex开启正则表达式sc -E org\\.apache\\.commons\\.lang\\.StringUtils
-d, --details显示详细信息
-f, --field输出当前类的成员变量信息(需要配合参数-d一起使用)sc -d -f demo.MathGame

sm:搜索出所有已经加载了 Class 信息

作用:“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。

参数名称参数说明Demo
<class-pattern>类名表达式匹配sm java.lang.String
-E, --regex开启正则表达式sm -Ed org\\.apache\\.commons\\.lang\.StringUtils .*
-d, --details显示详细信息sm -d java.lang.String toString

jad:反编译指定已加载类的源码

功能示例
反编绎时只显示源代码jad --source-only demo.MathGame
反编译指定类jad java.lang.String
反编译指定的函数jad demo.MathGame main
反编译时指定ClassLoaderjad org.apache.log4j.Logger
jad org.apache.log4j.Logger -c 69dcaba4

redefine:加载外部的.class文件,redefine jvm已加载的类

参数名称参数说明Demo
-cClassLoaderhashcoderedefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
-p外部的.class文件的完整路径,支持多个redefine /tmp/Test.class

组合用法

  1. jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
  2. mc /tmp/UserController.java -d /tmp
  3. redefine /tmp/com/example/demo/arthas/user/UserController.class

限制

  • 不允许新增加field/method
  • 正在跑的函数,没有退出不能生效,比如下面新增加的System.out.println,只有run()函数里的会生效

classloader:查看classloader的继承树,urls,类加载信息

参数名称参数说明Demo
-a, --all列出所有ClassLoader加载的类,请谨慎使用
-c, --classloader <value>ClassLoaderhashcode,查看URLClassLoader实际的urlsclassloader -c 3d4eac69
-h, --helpthis help
-i, --include-reflection-classloader
-l, --list-classloader按类加载实例进行统计classloader -l
--load <value> ClassLoader去加载指定的类,配合-cclassloader -c 3d4eac69 --load demo.MathGame
-r, --resource <value> ClassLoader去查找resource 配合-cclassloader -c 3d4eac69 -r META-INF/MANIFEST.MF
classloader -c 1b6d3586 -r java/lang/String.class
-t, --tree打印所有ClassLoader的继承树classloader -t

JVM相关

字节码增强