• 项目总结72:Arthas的常用指令使用


     项目总结72:Arthas的常用指令使用

    START

    官方文档信息文档信息:https://arthas.aliyun.com/doc/tt.html

    启动方法

    1. java -jar /usr/lib/arthas-packaging-3.3.2-bin/arthas-boot.jar

    [root@kaihu-mngjsinterface-container-57599c47b8-mdvhm arthas-packaging-3.3.2-bin]# java -jar /usr/lib/arthas-packaging-3.3.2-bin/arthas-boot.jar ## 启动Arthas
    [INFO] arthas-boot version: 3.3.2
    [INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
    * [1]: 1 noble-metal-assets-statistics.jar
    1 ##选择PID
    [INFO] arthas home: /usr/lib/arthas-packaging-3.3.2-bin
    [INFO] Try to attach process 1
    [INFO] Attach process 1 success.
    [INFO] arthas-client connect 127.0.0.1 3658
      ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
    /  O   |  .--. ''--.  .--'|  '--'  | /  O   '   .-'
    |  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
    |  | |  ||  |      |  |   |  |  |  ||  | |  |.-'    |
    `--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'
    wiki      https://alibaba.github.io/arthas
    tutorials https://alibaba.github.io/arthas/arthas-tutorials
    version   3.3.2
    pid       1
    time      2020-09-29 16:32:15

    常用命令

        常用指令集合

    1. dashboard:查看当前进程的信息

    [arthas@1]$ dashboard --help
     USAGE:
       dashboard [-h] [-i <value>] [-n <value>]
    
     SUMMARY:
       Overview of target jvm's thread, memory, gc, vm, tomcat info.
    
     EXAMPLES:
       dashboard
       dashboard -n 10
       dashboard -i 2000
    
     WIKI:
       https://alibaba.github.io/arthas/dashboard
    
     OPTIONS:
     -h, --help                                               this help
     -i, --interval <value>                                   The interval (in ms) between two executions, default is 5000 ms.
     -n, --number-of-execution <value>                        The number of times this command will be executed.

     

        2.thread: 查看当前线程信息,查看线程的堆栈

    [arthas@1]$ thread --help
     USAGE:
       thread [-h] [-b] [--lockedMonitors] [--lockedSynchronizers] [-i <value>] [--state <value>] [-n <value>] [id]
    
     SUMMARY:
       Display thread info, thread stack
    
     EXAMPLES:
       thread
       thread 51
       thread -n -1
       thread -n 5
       thread -b
       thread -i 2000
       thread --state BLOCKED
    
     WIKI:
       https://alibaba.github.io/arthas/thread
    
     OPTIONS:
     -h, --help                                               this help
     -b, --include-blocking-thread                            Find the thread who is holding a lock that blocks the most number of threads.
         --lockedMonitors                                     Find the thread info with lockedMonitors flag, default value is false.
         --lockedSynchronizers                                Find the thread info with lockedSynchronizers flag, default value is false.
     -i, --sample-interval <value>                            Specify the sampling interval (in ms) when calculating cpu usage.
         --state <value>                                      Display the thead filter by the state. NEW, RUNNABLE, TIMED_WAITING, WAITING, BLOCKED, TERMINATED is optional.
     -n, --top-n-threads <value>                              The number of thread(s) to show, ordered by cpu utilization, -1 to show all.
     <id>                                                     Show thread stack

    3. jad:反编译class文件

    [arthas@1]$ jsd --help
    java.lang.IllegalArgumentException: jsd: command not found
    [arthas@1]$ jad --help
     USAGE:
       jad [-c <value>] [-h] [--hideUnicode] [-E] [--source-only] class-pattern [method-name]
    
     SUMMARY:
       Decompile class
    
     EXAMPLES:
       jad java.lang.String
       jad java.lang.String toString
       jad --source-only java.lang.String
       jad -c 39eb305e org/apache/log4j/Logger
       jad -c 39eb305e -E org\.apache\.*\.StringUtils
    
     WIKI:
       https://alibaba.github.io/arthas/jad
    
     OPTIONS:
     -c, --code <value>                                       The hash code of the special class's classLoader
     -h, --help                                               this help
         --hideUnicode                                        hide unicode, default value false
     -E, --regex                                              Enable regular expression to match (wildcard matching by default)
         --source-only                                        Output source code only
     <class-pattern>                                          Class name pattern, use either '.' or '/' as separator
     <method-name>                                            method name pattern, decompile a specific method instead of the whole class

     

    4. watch   查看函数返回值

    [arthas@1]$ watch --help
     USAGE:
       watch [-b] [-e] [-x <value>] [-f] [-h] [-n <value>] [--listenerId <value>] [-E] [-M <value>] [-s] class-pattern method-pattern [express] [condition-express]
    
     SUMMARY:
       Display the input/output parameter, return object, and thrown exception of specified method invocation
       The express may be one of the following expression (evaluated dynamically):
               target : the object
                clazz : the object's class
               method : the constructor or method
               params : the parameters array of method
         params[0..n] : the element of parameters array
            returnObj : the returned object of method
             throwExp : the throw exception of method
             isReturn : the method ended by return
              isThrow : the method ended by throwing exception
                #cost : the execution time in ms of method invocation
     Examples:
       watch -b org.apache.commons.lang.StringUtils isBlank params
       watch -f org.apache.commons.lang.StringUtils isBlank returnObj
       watch org.apache.commons.lang.StringUtils isBlank '{params, target, returnObj}' -x 2
       watch -bf *StringUtils isBlank params
       watch *StringUtils isBlank params[0]
       watch *StringUtils isBlank params[0] params[0].length==1
       watch *StringUtils isBlank params '#cost>100'
       watch -E -b org.apache.commons.lang.StringUtils isBlank params[0]
    
    
     OPTIONS:
     -b, --before                                             Watch before invocation
     -e, --exception                                          Watch after throw exception
     -x, --expand <value>                                     Expand level of object (1 by default)
     -f, --finish                                             Watch after invocation, enable by default
     -h, --help                                               this help
     -n, --limits <value>                                     Threshold of execution times
         --listenerId <value>                                 The special listenerId
     -E, --regex                                              Enable regular expression to match (wildcard matching by default)
     -M, --sizeLimit <value>                                  Upper size limit in bytes for the result (10 * 1024 * 1024 by default)
     -s, --success                                            Watch after successful invocation
     <class-pattern>                                          The full qualified class name you want to watch
     <method-pattern>                                         The method name you want to watch
     <express>                                                the content you want to watch, written by ognl.
                                                              Examples:
                                                                params
                                                                params[0]
                                                                'params[0]+params[1]'
                                                                '{params[0], target, returnObj}'
                                                                returnObj
                                                                throwExp
                                                                target
                                                                clazz
                                                                method
    
     <condition-express>                                      Conditional expression in ognl style, for example:
                                                                TRUE  : 1==1
                                                                TRUE  : true
                                                                FALSE : false
                                                                TRUE  : 'params.length>=0'
                                                                FALSE : 1==2

    5.monitor:监控方法执行次数

    [arthas@1]$ monitor --help
     USAGE:
       monitor [-c <value>] [-h] [-n <value>] [--listenerId <value>] [-E <value>] class-pattern method-pattern
    
     SUMMARY:
       Monitor method execution statistics, e.g. total/success/failure count, average rt, fail rate, etc.
    
     Examples:
       monitor org.apache.commons.lang.StringUtils isBlank
       monitor org.apache.commons.lang.StringUtils isBlank -c 5
       monitor -E org.apache.commons.lang.StringUtils isBlank
    
     WIKI:
       https://alibaba.github.io/arthas/monitor
    
     OPTIONS:
     -c, --cycle <value>                                      The monitor interval (in seconds), 60 seconds by default
     -h, --help                                               this help
     -n, --limits <value>                                     Threshold of execution times
         --listenerId <value>                                 The special listenerId
     -E, --regex <value>                                      Enable regular expression to match (wildcard matching by default)
     <class-pattern>                                          Path and classname of Pattern Matching
     <method-pattern>                                         Method of Pattern Matching

     

    6.TT: 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

    [arthas@1]$ tt --help
     USAGE:
       tt [-d] [--delete-all] [-x <value>] [-h] [-i <value>] [-n <value>] [-l] [--listenerId <value>] [-p] [-E] [--replay-interval <value>] [--replay-times <value>] [-s <val
     ue>] [-M <value>] [-t] [-w <value>] [class-pattern] [method-pattern] [condition-express]
    
     SUMMARY:
       Time Tunnel
       The express may be one of the following expression (evaluated dynamically):
               target : the object
                clazz : the object's class
               method : the constructor or method
               params : the parameters array of method
         params[0..n] : the element of parameters array
            returnObj : the returned object of method
             throwExp : the throw exception of method
             isReturn : the method ended by return
              isThrow : the method ended by throwing exception
                #cost : the execution time in ms of method invocation
     EXAMPLES:
       tt -t *StringUtils isEmpty
       tt -t *StringUtils isEmpty params[0].length==1
       tt -l
       tt -i 1000
       tt -i 1000 -w params[0]
       tt -i 1000 -p
       tt -i 1000 -p --replay-times 3 --replay-interval 3000
       tt --delete-all
    
     WIKI:
       https://alibaba.github.io/arthas/tt
    
     OPTIONS:
     -d, --delete                                             Delete time fragment specified by index
         --delete-all                                         Delete all the time fragments
     -x, --expand <value>                                     Expand level of object (1 by default)
     -h, --help                                               this help
     -i, --index <value>                                      Display the detailed information from specified time fragment
     -n, --limits <value>                                     Threshold of execution times
     -l, --list                                               List all the time fragments
         --listenerId <value>                                 The special listenerId
     -p, --play                                               Replay the time fragment specified by index
     -E, --regex                                              Enable regular expression to match (wildcard matching by default)
         --replay-interval <value>                            replay interval  for  play tt with option r greater than 1
         --replay-times <value>                               execution times when play tt
     -s, --search-express <value>                             Search-expression, to search the time fragments by ognl express.
                                                              The structure of 'advice' like conditional expression
     -M, --sizeLimit <value>                                  Upper size limit in bytes for the result (10 * 1024 * 1024 by default)
     -t, --time-tunnel                                        Record the method invocation within time fragments
     -w, --watch-express <value>                              watch the time fragment by ognl express.
                                                              Examples:
                                                                params
                                                                params[0]
                                                                'params[0]+params[1]'
                                                                '{params[0], target, returnObj}'
                                                                returnObj
                                                                throwExp
                                                                target
                                                                clazz
                                                                method
    
     <class-pattern>                                          Path and classname of Pattern Matching
     <method-pattern>                                         Method of Pattern Matching
     <condition-express>                                      Conditional expression in ognl style, for example:
                                                                TRUE  : 1==1
                                                                TRUE  : true
                                                                FALSE : false
                                                                TRUE  : 'params.length>=0'
                                                                FALSE : 1==2

     

    7.trace:方法内部调用路径,并输出方法路径上的每个节点上耗时

    [arthas@1]$ trace --help
     USAGE:
       trace [-h] [-n <value>] [--listenerId <value>] [-p <value>] [-E] [--skipJDKMethod <value>] class-pattern method-pattern [condition-express]
    
     SUMMARY:
       Trace the execution time of specified method invocation.
       The express may be one of the following expression (evaluated dynamically):
               target : the object
                clazz : the object's class
               method : the constructor or method
               params : the parameters array of method
         params[0..n] : the element of parameters array
            returnObj : the returned object of method
             throwExp : the throw exception of method
             isReturn : the method ended by return
              isThrow : the method ended by throwing exception
                #cost : the execution time in ms of method invocation
     EXAMPLES:
       trace org.apache.commons.lang.StringUtils isBlank
       trace *StringUtils isBlank
       trace *StringUtils isBlank params[0].length==1
       trace *StringUtils isBlank '#cost>100'
       trace -E org\.apache\.commons\.lang\.StringUtils isBlank
       trace -E com.test.ClassA|org.test.ClassB method1|method2|method3
       trace demo.MathGame run -n 5
       trace demo.MathGame run --skipJDKMethod false
    
     WIKI:
       https://alibaba.github.io/arthas/trace
    
     OPTIONS:
     -h, --help                                               this help
     -n, --limits <value>                                     Threshold of execution times
         --listenerId <value>                                 The special listenerId
     -p, --path <value>                                       path tracing pattern
     -E, --regex                                              Enable regular expression to match (wildcard matching by default)
         --skipJDKMethod <value>                              skip jdk method trace, default value true.
     <class-pattern>                                          Class name pattern, use either '.' or '/' as separator
     <method-pattern>                                         Method name pattern
     <condition-express>                                      Conditional expression in ognl style, for example:
                                                                TRUE  : 1==1
                                                                TRUE  : true
                                                                FALSE : false
                                                                TRUE  : 'params.length>=0'
                                                                FALSE : 1==2

     

    8.火焰图

    9.连接问题

      如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
      如果想完全退出arthas,可以执行stop命令。
     

    END

  • 相关阅读:
    NW.js开发环境的搭建
    EXPORTS与MODULE.EXPORTS的区别
    搭建 webpack + React 开发环境
    require,import区别?
    数据库中图片的二进制存储和显示
    二进制图片存储问题
    单线程(Thread)与多线程的区别
    软件测试心得--悲催我
    2015年-年度总结
    人生当中第一次转正
  • 原文地址:https://www.cnblogs.com/wobuchifanqie/p/13753534.html
Copyright © 2020-2023  润新知