Arthas进阶
官网资料是最全的,这里做一下笔记整理记录下
1. 启动demo程序
本次启动的demo程序是带有web页面的spring-boot demo,开启的端口是80,源码地址
1 wget https://github.com/hengyunabc/spring-boot-inside/raw/master/demo-arthas-spring-boot/demo-arthas-spring-boot.jar 2 java -jar demo-arthas-spring-boot.jar
2. 启动Arthas服务
1 wget https://arthas.aliyun.com/arthas-boot.jar 2 java -jar arthas-boot.jar --target-ip 0.0.0.0
3. 查看jvm信息
- sysprop
sysprop 可以打印所有的System properties信息。也可以指定单个key: sysprop java.version ,也可以通过grep来过滤 sysprop |grep user ,还可以设置新的值: sysprop testKey testValue
- sysenv
sysenv 命令可以获取环境变量,与 sysprop 类似
- jvm
jvm 可以打印出jvm的各种详细信息
4. 使用Tips
- 使用命令的help,比如sysprop -h
- 使用自动补全,在使用有疑惑时,可以输入
Tab
来获取更多信息。比如输入sysprop java.
之后,再输入Tab
,会补全出对应的key:
- readline的快捷键支持。Arthas支持常见的命令行快捷键,比如Ctrl + A跳转行首,Ctrl + E跳转行尾。更多的快捷键可以用 keymap 命令查看。
- 历史命令补全。如果想再执行之前的命令,可以在输入一半时,按
Up/↑
或者Ddown/↓
,来匹配到之前的命令。如果想查看所有的历史命令,也可以通过 history命令查看到。 - pipeline支持。比如sysprop | grep java 和 sysprop | wc -l
5. sc/sm查看已加载的类
sc 命令可以查找到所有JVM已经加载到的类。
如果搜索的是接口,还会搜索所有的实现类。比如查看所有的Filter实现类:
1 sc javax.servlet.Filter
通过-d参数,可以打印出类加载的具体信息,很方便查找类加载问题。
1 sc -d javax.servlet.Filter
sc支持通配,比如搜索所有的StringUtils:
1 sc *StringUtils
sm 命令则是查找类的具体函数。比如:
1 sm java.math.RoundingMode
通过-d参数可以打印函数的具体属性:
1 sm -d java.math.RoundingMode
也可以查找特定的函数,比如查找构造函数:
1 sm java.math.RoundingMode <init>
6. jad反编译
可以通过 jad
命令来反编译代码:
1 jad com.example.demo.arthas.user.UserController
通过--source-only
参数可以只打印出在反编译的源代码:
1 jad --source-only com.example.demo.arthas.user.UserController
7. ognl
在Arthas里,有一个单独的ognl
命令,可以动态执行代码。
调用静态方法 ognl '@java.lang.System@out.println("hello ognl")' ,可以看到在demo应用控制台输出中输出了这个信息
补充一个官网的在线练习地址