• Arthas进阶学习(常用命令)


    Step1

    下载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"可查看命令

    Step3

    sysprop

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

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

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

    可以设置新的value: sysprop testKey testValue

    sysenv

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

    jvm

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

    dashboard

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

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

    Step4

    Tips

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

    help

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

    比如:

    sysprop -h

    自动补全

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

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

    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

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

    sc -d javax.servlet.Filter

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

    sc *StringUtils

    sm

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

    sm java.math.RoundingMode

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

    sm -d java.math.RoundingMode

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

    sm java.math.RoundingMode <init>

     

    Step6

    Jad

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

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

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

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

     

    Step7

    Ognl

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

    调用static函数

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

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

    获取静态类静态字段

    获取UserController类里的logger字段:

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

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

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

     

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

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

      

    更多

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

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




    Arthas 进阶的案例

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

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

  • 相关阅读:
    Android开发技术周报 Issue#43
    Android开发技术周报 Issue#44
    Android开发技术周报 Issue#45
    Android开发技术周报 Issue#46
    Android开发技术周报 Issue#48
    Android开发技术周报 Issue#47
    Android开发技术周报 Issue#49
    Android开发技术周报 Issue#50
    Android开发技术周报 Issue#51
    angularjs数据交互
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10659265.html
Copyright © 2020-2023  润新知