Arthas进阶学习(常用命令) Step1 Step2 Step3 Step4 Step5 Step6 Step7 Arthas 进阶的案例

下载demo-arthas-spring-boot.jar,再用java -jar命令启动:

wget https://github.com/hengyunabc/katacoda-scenarios/raw/master/demo-arthas-spring-boot.jar

java -jar demo-arthas-spring-boot.jar --server.port=1945

  

下载了jar包,因为该项目默认是80端口,而主机上80端口已经被占用,所以启动时设置了端口号--server.port=1945(2019年4月5日)

Step2

启动"arthas"

java -jar arthas-boot.jar --target-ip 0.0.0.0

  

选择刚才的项目

输入"help"可查看命令

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

Step3

sysprop

sysprop 可以打印所有的System Properties信息。

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

也可以指定单个key: sysprop java.version

也可以通过grep来过滤: sysprop | grep user

可以设置新的value: sysprop testKey testValue

sysenv

sysenv 命令可以获取到环境变量,比如ssh登录的ip等。

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

jvm

jvm 命令会打印出JVM的各种详细信息。

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

dashboard

dashboard 命令可以查看当前系统的实时数据面板,每5s更新一次。

输入 Q 或者 Ctrl+C 可以退出dashboard命令

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

Step4

Tips

为了更好使用Arthas,下面先介绍Arthas里的一些使用技巧。

help

Arthas里每一个命令都有详细的帮助信息。可以用-h来查看。帮助信息里有EXAMPLESWIKI链接。

比如:

sysprop -h

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

自动补全

Arthas支持丰富的自动补全功能,在使用有疑惑时,可以输入Tab来获取更多信息。

比如输入 sysprop java. 之后,再输入Tab,会补全出对应的key:

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

readline的快捷键支持

Arthas支持常见的命令行快捷键,比如Ctrl + A跳转行首,Ctrl + E跳转行尾。

更多的快捷键可以用 keymap 命令查看。

历史命令的补全

如果想再执行之前的命令,可以在输入一半时,按Up/↑ 或者 Ddown/↓,来匹配到之前的命令。

比如之前执行过sysprop java.version,那么在输入sysprop ja之后,可以输入Up/↑,就会自动补全为sysprop java.version

如果想查看所有的历史命令,也可以通过 history 命令查看到。

pipeline

Arthas支持在pipeline之后,执行一些简单的命令,比如:

sysprop | grep java

sysprop | wc -l总共的行

Step5

sc/sm 查看已加载的类

下面介绍Arthas里查找已加载类的命令。

sc

sc 命令可以查找到所有JVM已经加载到的类

如果搜索的是接口,还会搜索所有的实现类。比如查看所有的Filter实现类:

sc javax.servlet.Filter

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

通过-d参数,可以打印出类加载的具体信息,很方便查找类加载问题。

sc -d javax.servlet.Filter

sc支持通配,比如搜索所有的StringUtils

sc *StringUtils

sm

sm命令则是查找类的具体函数。比如:

sm java.math.RoundingMode

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

通过-d参数可以打印函数的具体属性

sm -d java.math.RoundingMode

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

也可以查找特定的函数,比如查找构造函数:

sm java.math.RoundingMode <init>

 Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

Step6

Jad

可以通过 jad 命令来反编译代码:

jad com.example.demo.arthas.user.UserController

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

通过--source-only参数可以只打印出在反编译的源代码

jad --source-only com.example.demo.arthas.user.UserController

 Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

Step7

Ognl

在Arthas里,有一个单独的ognl命令,可以动态执行代码。

static函数

ognl '@java.lang.System@out.println("hello ognl")'

可以检查"demo-arthas-spring-boot.jar "里的进程输出,可以发现打印出了hello ognl

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

静态字段

获取UserController类里的logger字段:

ognl -c 1be6f5c3 @com.example.demo.arthas.user.UserController@logger

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

还可以通过-x参数控制返回值的展开层数。比如:

ognl -c 1be6f5c3 -x 2 @com.example.demo.arthas.user.UserController@logger

 Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

执行多行表达式,赋值给临时变量,返回一个List

ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'

  

Arthas进阶学习(常用命令)
Step1
Step2
Step3
Step4
Step5
Step6
Step7
Arthas 进阶的案例

更多

在Arthas里ognl表达式是很重要的功能,在很多命令里都可以使用ognl表达式。

一些更复杂的用法,可以参考:




Arthas 进阶的案例

 https://www.cnblogs.com/theRhyme/p/10660287.html

来源:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced