spring boot jar 启动命令_Jvm性能分析神奇-ARTHAS进阶学习(常用命令)

Step1

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

1

2

3

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"

1

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

选择刚才的项目

输入"help"可查看命令

bac5a4ad120a024034d26c122338de4d.png

Step3

sysprop

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

72a63685e23cca94a5b4945aea02f12c.png

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

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

可以设置新的value: sysprop testKey testValue

sysenv

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

c89cfb071d084de5ca0e435e1400f839.png

jvm

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

edb88b2e0b6afe3ce21f2b8ac3de9add.png

dashboard

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

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

c44c31a8ae7d6f1e052ed93b918f6927.png

Step4

Tips

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

help

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

比如:

sysprop -h

0331328ad961295328b01b4766af73c8.png

自动补全

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

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

cebacaf9835ac97e7a27532776bd3432.png

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

e10992373d8846a2c3e85dfec2836cd8.png

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

sc -d javax.servlet.Filter

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

sc *StringUtils

sm

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

sm java.math.RoundingMode

42de4567f9ce41ba37cc4018e1a5ac96.png

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

sm -d java.math.RoundingMode

fbcd5ef0d81af0559617df6c8b283290.png

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

sm java.math.RoundingMode

72fb160e0eac3a1e721e9aaf8fa20a97.png
1fe02a2faec6205035cbef6c4be0cd32.png

Step6

Jad

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

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

499a859fd6f08a8adb0f78ec650eb50c.png

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

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

22151b0ae268c81e94025c567144dacf.png

Step7

Ognl

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

调用static函数

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

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

65c6a557ee4af4638135dc79668eca69.png

获取静态类静态字段

获取UserController类里的logger字段:

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

5942ac64d17cdede212b6918f2cfc4d8.png

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

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

9728efac8e9afd0bf14b1a9afa8c3044.png

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

1

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

f861710ab2d89c187b9589679231668d.png

更多

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

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

  • OGNL特殊用法请参考:https://github.com/alibaba/arthas/issues/71
  • OGNL表达式官方指南:https://commons.apache.org/proper/commons-ognl/language-guide.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值