个人学习Arthas

Arthas功能介绍

2020-04-12  本文已影响0人  晴天哥_王志

系列

Arthas入门篇
Arthas功能介绍
Arthas 启动过程分析

准备工作

curl -O https://alibaba.github.io/arthas/arthas-demo.jar
java -jar arthas-demo.jar

arthas-demo是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。arthas-demo源代码:查看

curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
$ $ java -jar arthas-boot.jar
* [1]: 35542
  [2]: 71560 arthas-demo.jar


[INFO] Try to attach process 71560
[INFO] Attach process 71560 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'
 
wiki: https://alibaba.github.io/arthas
version: 3.0.5.20181127201536
pid: 71560
time: 2018-11-28 19:16:24
 
$

Demo进程是第2个,则输入2,再输入回车/enter。Arthas会attach到目标进程上,并输出日志。

命令帮助

[arthas@37711]$ help
 NAME         DESCRIPTION
 help         Display Arthas Help
 keymap       Display all the available keymap for the specified connection.
 sc           Search all the classes loaded by JVM
 sm           Search the method of classes loaded by JVM
 classloader  Show classloader info
 jad          Decompile class
 getstatic    Show the static field of a class
 monitor      Monitor method execution statistics, e.g. total/success/failure count, average rt, fail rate, etc.
 stack        Display the stack trace for the specified class and method
 thread       Display thread info, thread stack
 trace        Trace the execution time of specified method invocation.
 watch        Display the input/output parameter, return object, and thrown exception of specified method invocation
 tt           Time Tunnel
 jvm          Display the target JVM information
 perfcounter  Display the perf counter infornation.
 ognl         Execute ognl expression.
 mc           Memory compiler, compiles java files into bytecode and class files in memory.
 redefine     Redefine classes. @see Instrumentation#redefineClasses(ClassDefinition...)
 dashboard    Overview of target jvms thread, memory, gc, vm, tomcat info.
 dump         Dump class byte array from JVM
 heapdump     Heap dump
 options      View and change various Arthas options
 cls          Clear the screen
 reset        Reset all the enhanced classes
 version      Display Arthas version
 session      Display current session information
 sysprop      Display, and change the system properties.
 sysenv       Display the system env.
 vmoption     Display, and update the vm diagnostic options.
 logger       Print logger info, and update the logger level
 history      Display command history
 cat          Concatenate and print files
 echo         write arguments to the standard output
 pwd          Return working directory name
 mbean        Display the mbean information
 grep         grep command for pipes.
 tee          tee command for pipes.
 profiler     Async Profiler. https://github.com/jvm-profiling-tools/async-profiler
 stop         Stop/Shutdown Arthas server and exit the console.

功能展示

Arthas基本的命令通过help命令就可以看到了,这里我们选择几个比较好玩的命令展示一下。

dashboard - 当前系统的实时数据面板

[arthas@37711]$ 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.

thread - 查看当前线程信息,查看线程的堆栈

[arthas@37711]$ thread -h
 USAGE:
   thread [-h] [-b] [-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.
 -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

tt - 记录方法执行信息

[arthas@37711]$ tt -h
 USAGE:
   tt [-d] [--delete-all] [-x <value>] [-h] [-i <value>] [-n <value>] [-l] [-p] [-E] [--replay-interval <value>] [--replay-times <value>] [-s <value>] [-M <value>] [-t] [-w <value>] [class-pattern] [meth
 od-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


sc - 查看JVM已加载的类信息

[arthas@37711]$ sc -h
 USAGE:
   sc [-c <value>] [-d] [-x <value>] [-f] [-h] [-E] class-pattern

 SUMMARY:
   Search all the classes loaded by JVM

 EXAMPLES:
   sc -d org.apache.commons.lang.StringUtils
   sc -d org/apache/commons/lang/StringUtils
   sc -d *StringUtils
   sc -d -f org.apache.commons.lang.StringUtils
   sc -E org\\.apache\\.commons\\.lang\\.StringUtils

 WIKI:
   https://alibaba.github.io/arthas/sc

 OPTIONS:
 -c, --classloader <value>                                           The hash code of the special class's classLoader
 -d, --details                                                       Display the details of class
 -x, --expand <value>                                                Expand level of object (0 by default)
 -f, --field                                                         Display all the member variables
 -h, --help                                                          this help
 -E, --regex                                                         Enable regular expression to match (wildcard matching by default)
 <class-pattern>                                                     Class name pattern, use either '.' or '/' as separator

watch - 方法执行数据观测

[arthas@37711]$ watch -h
 USAGE:
   watch [-b] [-e] [-x <value>] [-f] [-h] [-n <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]

 WIKI:
   https://alibaba.github.io/arthas/watch

trace - 输出方法路径上的节点耗时

[arthas@37711]$ trace -h
 USAGE:
   trace [-h] [-n <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
 -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

profiler - 使用async-profiler生成火焰图

[arthas@37711]$ profiler -h
 USAGE:
   profiler [--allkernel] [--alluser] [-e <value>] [-f <value>] [--format <value>] [-h] [-i <value>] [--threads] action [actionArg]

 SUMMARY:
   Async Profiler. https://github.com/jvm-profiling-tools/async-profiler

 EXAMPLES:
   profiler start
   profiler stop
   profiler list                # list all supported events
   profiler actions             # list all supported actions
   profiler start --event alloc
   profiler stop --format svg   # output file format, support svg,html,jfr
   profiler stop --file /tmp/result.html
   profiler stop --threads
   profiler status
   profiler resume              # Start or resume profiling without resetting collected data.
   profiler getSamples          # Get the number of samples collected during the profiling session
   profiler dumpFlat            # Dump flat profile, i.e. the histogram of the hottest methods
   profiler dumpCollapsed       # Dump profile in 'collapsed stacktraces' format
   profiler dumpTraces          # Dump collected stack traces
   profiler execute 'start'                       # Execute an agent-compatible profiling command
   profiler execute 'stop,file=/tmp/result.svg'   # Execute an agent-compatible profiling command

上一篇 下一篇

猜你喜欢

热点阅读