美文网首页
arthas常用命令

arthas常用命令

作者: 乙腾 | 来源:发表于2021-10-25 11:22 被阅读0次

    执行成功后, arthas提供了一种命令行方式的交互方式, arthas会检测当前服务器上的Javai程,并将进程列表展示出来,用户输入对应的编号(1.2.3.4.)进行选择,然后回车。

    启动退出的方式

    启动方式

    方式1:

    java -jar arthas-boot.jar
    #选择进程(输入[]内编写(不是PID)回车)
    [INFO] arthas-boot version: 3.1.4
    INFO1 Found existing java process, please choose one and hit RETURN.
       *[1]: 11616 com.Arthas
        [2]: 8676
        [3]: 16200 org.jetbrains.jps.cmdline. Launcher
        [41: 21832 org.jetbrains.idea. maven. server. RemoteMavenServer
    

    方式2:运行时选择Java进程PID

    java -jar arthas-boot.jar [PID]
    

    退出

    quit

    指令

    基础指令

    • help——查看命令帮助信息
    • cat——打印文件内容,和linux里的cat命令类似
    • echo–打印参数,和linux里的echo命令类似
    • grep——匹配查找,和linux里的grep命令类似
    • base64——base64编码转换,和linux里的base64命令类似
    • tee——复制标准输入到标准输出和指定的文件,和linux里的tee命令类似
    • pwd——返回当前的工作目录,和linux命令类似
    • cls——清空当前屏幕区域
    • session——查看当前会话的信息
    • reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
    • version——输出当前目标 Java 进程所加载的 Arthas 版本号
    • history——打印命令历史
    • quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
    • stop——关闭 Arthas 服务端,所有 Arthas 客户端全部退出

    JVM相关

    dashboard:查看实时数据面板

    参数说明

    参数名称 参数说明
    [i:] 刷新实时数据的时间间隔 (ms),默认5000ms
    [n:] 刷新实时数据的次数

    使用

    dashboard -i 30000
    
    image.png

    通过图中的thread区域可以看出当前占用cpu最高的两个是jvm内部线程

    数据说明

    • ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应。
    • NAME: 线程名
    • GROUP: 线程组名
    • PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
    • STATE: 线程的状态
    • CPU%: 线程的cpu使用率。比如采样间隔1000ms,某个线程的增量cpu时间为100ms,则cpu使用率=100/1000=10%
    • DELTA_TIME: 上次采样之后线程运行增量CPU时间,数据格式为秒
    • TIME: 线程运行总CPU时间,数据格式为分:秒
    • INTERRUPTED: 线程当前的中断位状态
    • DAEMON: 是否是daemon线程
    • usage:内存使用的百分比

    JVM内部线程

    Java 8之后支持获取JVM内部线程CPU时间,这些线程只有名称和CPU时间,没有ID及状态等信息(显示ID为-1)。 通过内部线程可以观测到JVM活动,如GC、JIT编译等占用CPU情况,方便了解JVM整体运行状况。

    • 当JVM 堆(heap)/元数据(metaspace)空间不足或OOM时,可以看到GC线程的CPU占用率明显高于其他的线程。
    • 当执行trace/watch/tt/redefine等命令后,可以看到JIT线程活动变得更频繁。因为JVM热更新class字节码时清除了此class相关的JIT编译结果,需要重新编译。

    JVM内部线程包括下面几种:

    • JIT编译线程: 如 C1 CompilerThread0, C2 CompilerThread0
    • GC线程: 如GC Thread0, G1 Young RemSet Sampling
    • 其它内部线程: 如VM Periodic Task Thread, VM Thread, Service Thread

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

    参数说明

    参数名称 参数说明
    id 线程id
    [n:] 指定最忙的前N个线程并打印堆栈
    [b] 找出当前阻塞其他线程的线程
    [i <value>] 指定cpu使用率统计的采样间隔,单位为毫秒,默认值为200
    [--all] 显示所有匹配的线程

    使用参考

    展示当前最忙的前N个线程并打印堆栈
    [arthas@10069]$ thread -n 4
    
    
    "sentinel-time-tick-thread" Id=62 cpuUsage=0.91% deltaTime=1ms time=2176ms TIMED_WAITING
        at java.lang.Thread.sleep(Native Method)
        at java.lang.Thread.sleep(Thread.java:340)
        at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)
        at com.alibaba.csp.sentinel.util.TimeUtil$1.run(TimeUtil.java:37)
        at java.lang.Thread.run(Thread.java:748)
    
    
    "C1 CompilerThread1" [Internal] cpuUsage=0.34% deltaTime=0ms time=2273ms
    
    "arthas-command-execute" Id=58 cpuUsage=0.15% deltaTime=0ms time=7ms RUNNABLE
        at sun.management.ThreadImpl.dumpThreads0(Native Method)
        at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:461)
        at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads(ThreadCommand.java:206)
        at com.taobao.arthas.core.command.monitor200.ThreadCommand.process(ThreadCommand.java:122)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:82)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:18)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:111)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:108)
        at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:385)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
     
    "VM Periodic Task Thread" [Internal] cpuUsage=0.07% deltaTime=0ms time=584ms
    
    • 没有线程ID,包含[Internal]表示为JVM内部线程,如第13行。
    • cpuUsage为采样间隔时间内线程的CPU使用率。
    • deltaTime为采样间隔时间内线程的增量CPU时间,小于1ms时被取整显示为0ms。
    • time 线程运行总CPU时间。

    注意:线程栈为第二采样结束时获取,不能表明采样间隔时间内该线程都是在处理相同的任务。建议间隔时间不要太长,可能间隔时间越大越不准确。 可以根据具体情况尝试指定不同的间隔时间,观察输出结果。

    当没有参数时,显示第一页线程的信息

    默认按照CPU增量时间降序排列,只显示第一页数据,默认按照CPU增量时间降序排列。

    [arthas@26605]$ thread
    Threads Total: 45, NEW: 0, RUNNABLE: 18, BLOCKED: 0, WAITING: 15, TIMED_WAITING: 7, TERMINATED: 0, Internal threads: 5
    ID     NAME                                       GROUP                 PRIORITY      STATE         %CPU           DELTA_TIME    TIME          INTERRUPTED    DAEMON
    -1     C1 CompilerThread1                         -                     -1            -             0.35           0.000         0:1.559       false          true
    57     arthas-command-execute                     system                5             RUNNABLE      0.15           0.000         0:0.014       false          true
    25     sentinel-dashboard-metrics-fetch-task-thre main                  5             TIMED_WAITING 0.06           0.000         0:0.016       false          false
    56     arthas-NettyHttpTelnetBootstrap-3-2        system                5             RUNNABLE      0.05           0.000         0:0.105       false          true
    -1     VM Periodic Task Thread                    -                     -1            -             0.04           0.000         0:0.071       false          true
    28     NioBlockingSelector.BlockPoller-1          main                  5             RUNNABLE      0.02           0.000         0:0.005       false          true
    41     http-nio-8080-AsyncTimeout                 main                  5             TIMED_WAITING 0.02           0.000         0:0.006       false          true
    39     http-nio-8080-ClientPoller-0               main                  5             RUNNABLE      0.02           0.000         0:0.007       false          true
    -1     C2 CompilerThread0                         -                     -1            -             0.0            0.000         0:4.884       false          true
    2      Reference Handler                          system                10            WAITING       0.0            0.000         0:0.007       false          true
    3      Finalizer                                  system                8             WAITING       0.0            0.000         0:0.014       false          true
    4      Signal Dispatcher                          system                9             RUNNABLE      0.0            0.000         0:0.000       false          true
    44     Attach Listener                            system                9             RUNNABLE      0.0            0.000         0:0.006       false          true
    46     arthas-timer                               system                9             WAITING       0.0            0.000         0:0.000       false          true
    49     arthas-NettyHttpTelnetBootstrap-3-1        system                5             RUNNABLE      0.0            0.000         0:0.022       false          true
    50     arthas-NettyWebsocketTtyBootstrap-4-1      system                5             RUNNABLE      0.0            0.000         0:0.000       false          true
    51     arthas-NettyWebsocketTtyBootstrap-4-2      system                5             RUNNABLE      0.0            0.000         0:0.000       false          true
    52     arthas-shell-server                        system                9             TIMED_WAITING 0.0            0.000         0:0.000       false          true
    53     arthas-session-manager                     system                9             TIMED_WAITING 0.0            0.000         0:0.000       false          true
    54     arthas-UserStat                            system                9             WAITING       0.0            0.000         0:0.000       false          true
    12     sentinel-command-center-executor-thread-1  main                  5             RUNNABLE      0.0            0.000         0:0.000       false          false
    13     sentinel-heartbeat-send-task-thread-1      main                  5             TIMED_WAITING 0.0            0.000         0:0.002       false          true
    16     sentinel-heartbeat-send-task-thread-2      main                  5             WAITING       0.0            0.000         0:0.000       false          true
    19     ContainerBackgroundProcessor[StandardEngin main                  5             TIMED_WAITING 0.0            0.000         0:0.005       false          true
    20     container-0                                main                  5             TIMED_WAITING 0.0            0.000         0:0.000       false          false
    21     pool-1-thread-1                            main                  5             RUNNABLE      0.0            0.000         0:0.008       false          false
    22     I/O dispatcher 1                           main                  5             RUNNABLE      0.0            0.000         0:0.005       false          false
    23     I/O dispatcher 2                           main                  5             RUNNABLE      0.0            0.000         0:0.005       false          false
    24     pool-2-thread-1                            main                  5             RUNNABLE      0.0            0.000         0:0.004       false          false
    26     I/O dispatcher 3                           main                  5             RUNNABLE      0.0            0.000         0:0.004       false          false
    27     I/O dispatcher 4                           main                  5             RUNNABLE      0.0            0.000         0:0.003       false          false
    29     http-nio-8080-exec-1                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    30     http-nio-8080-exec-2                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    31     http-nio-8080-exec-3                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    32     http-nio-8080-exec-4                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    33     http-nio-8080-exec-5                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    34     http-nio-8080-exec-6                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    35     http-nio-8080-exec-7                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    36     http-nio-8080-exec-8                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    [arthas@26605]$
    
    
    thread –all, 显示所有匹配的线程

    显示所有匹配线程信息,有时需要获取全部JVM的线程数据进行分析。

    thread id, 显示指定线程的运行堆栈
    [arthas@26605]$ thread 12
    "sentinel-command-center-executor-thread-1" Id=12 RUNNABLE (in native)
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
        at java.net.ServerSocket.implAccept(ServerSocket.java:560)
        at java.net.ServerSocket.accept(ServerSocket.java:528)
        at com.alibaba.csp.sentinel.transport.command.SimpleHttpCommandCenter$ServerThread.run(SimpleHttpCommandCenter.java:188)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
    
    

    thread -b, 找出当前阻塞其他线程的线程
    找到阻塞其他线程的线程,即当前占用锁的线程

    $ thread -b
    "http-bio-8080-exec-4" Id=27 TIMED_WAITING
        at java.lang.Thread.sleep(Native Method)
        at test.arthas.TestThreadBlocking.doGet(TestThreadBlocking.java:22)
        -  locked java.lang.Object@725be470 <---- but blocks 4 other threads!         //阻塞其他四个线程
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at test.filter.TestDurexFilter.doFilter(TestDurexFilter.java:46)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at com.taobao.tomcat.valves.ContextLoadFilterValve$FilterChainAdapter.doFilter(ContextLoadFilterValve.java:191)
        at com.taobao.eagleeye.EagleEyeFilter.doFilter(EagleEyeFilter.java:81)
        at com.taobao.tomcat.valves.ContextLoadFilterValve.invoke(ContextLoadFilterValve.java:150)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:429)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        -  locked org.apache.tomcat.util.net.SocketWrapper@7127ee12
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
     
        Number of locked synchronizers = 1
        - java.util.concurrent.ThreadPoolExecutor$Worker@31a6493e
    

    注意, 目前只支持找出synchronized关键字阻塞住的线程, 如果是java.util.concurrent.Lock, 目前还不支持。

    thread -i, 指定采样时间间隔

    thread -i 1000 : 统计最近1000ms内的线程CPU时间。

    thread -n 3 -i 1000 : 列出1000ms内最忙的3个线程栈

    $ thread -n 3 -i 1000
    "as-command-execute-daemon" Id=4759 cpuUsage=23% RUNNABLE
        at sun.management.ThreadImpl.dumpThreads0(Native Method)
        at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:440)
        at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads(ThreadCommand.java:133)
        at com.taobao.arthas.core.command.monitor200.ThreadCommand.process(ThreadCommand.java:79)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:96)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:27)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:125)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:122)
        at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:332)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:756)
     
        Number of locked synchronizers = 1
        - java.util.concurrent.ThreadPoolExecutor$Worker@546aeec1
    ...
    

    thread –state ,查看指定状态的线程

    
    [arthas@26605]$ thread --state WAITING
    Threads Total: 43, NEW: 0, RUNNABLE: 18, BLOCKED: 0, WAITING: 15, TIMED_WAITING: 10, TERMINATED: 0
    ID     NAME                                       GROUP                 PRIORITY      STATE         %CPU           DELTA_TIME    TIME          INTERRUPTED    DAEMON
    2      Reference Handler                          system                10            WAITING       0.0            0.000         0:0.008       false          true
    3      Finalizer                                  system                8             WAITING       0.0            0.000         0:0.014       false          true
    46     arthas-timer                               system                9             WAITING       0.0            0.000         0:0.000       false          true
    54     arthas-UserStat                            system                9             WAITING       0.0            0.000         0:0.000       false          true
    16     sentinel-heartbeat-send-task-thread-2      main                  5             WAITING       0.0            0.000         0:0.001       false          true
    29     http-nio-8080-exec-1                       main                  5             WAITING       0.0            0.000         0:0.158       false          true
    30     http-nio-8080-exec-2                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    31     http-nio-8080-exec-3                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    32     http-nio-8080-exec-4                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    33     http-nio-8080-exec-5                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    34     http-nio-8080-exec-6                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    35     http-nio-8080-exec-7                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    36     http-nio-8080-exec-8                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    37     http-nio-8080-exec-9                       main                  5             WAITING       0.0            0.000         0:0.000       false          true
    38     http-nio-8080-exec-10                      main                  5             WAITING       0.0            0.000         0:0.000       false          true
    
    

    SC:查看JVM已加载的类信息

    “Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 [d][E][f][x:]

    参数

    参数名称 参数说明
    class-pattern 类名表达式匹配
    method-pattern 方法名表达式匹配
    [d] 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的ClassLoader等详细信息。
    如果一个类被多个ClassLoader所加载,则会出现多次
    [E] 开启正则表达式匹配,默认为通配符匹配
    [f] 输出当前类的成员变量信息(需要配合参数-d一起使用)
    [x:] 指定输出静态变量时属性的遍历深度,默认为 0,即直接使用 toString 输出
    [c:] 指定class的 ClassLoader 的 hashcode
    [classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name
    [n:] 具有详细信息的匹配类的最大数量(默认为100)
    • class-pattern支持全限定名,如com.taobao.test.AAA,也支持com/taobao/test/AAA这样的格式,这样,我们从异常堆栈里面把类名拷贝过来的时候,不需要在手动把/替换为.啦。
    • sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开options disable-sub-class true开关

    使用参考

    模糊搜索
    $ sc demo.*
    demo.MathGame
    Affect(row-cnt:1) cost in 55 ms.
    
    打印类的详细信息
    $ sc -d demo.MathGame
    class-info        demo.MathGame
    code-source       /private/tmp/math-game.jar
    name              demo.MathGame
    isInterface       false
    isAnnotation      false
    isEnum            false
    isAnonymousClass  false
    isArray           false
    isLocalClass      false
    isMemberClass     false
    isPrimitive       false
    isSynthetic       false
    simple-name       MathGame
    modifier          public
    annotation
    interfaces
    super-class       +-java.lang.Object
    class-loader      +-sun.misc.Launcher$AppClassLoader@3d4eac69
                        +-sun.misc.Launcher$ExtClassLoader@66350f69
    classLoaderHash   3d4eac69
     
    Affect(row-cnt:1) cost in 875 ms.
    
    打印出类的Field信息
    $ sc -d -f demo.MathGame
    class-info        demo.MathGame                 //类信息
    code-source       /private/tmp/math-game.jar   //代码位置
    name              demo.MathGame           //类名
    isInterface       false                  //是不是接口
    isAnnotation      false                  //是不是注释
    isEnum            false                  //是不是枚举
    isAnonymousClass  false
    isArray           false
    isLocalClass      false
    isMemberClass     false
    isPrimitive       false
    isSynthetic       false
    simple-name       MathGame
    modifier          public
    annotation
    interfaces
    super-class       +-java.lang.Object                  //父类
    class-loader      +-sun.misc.Launcher$AppClassLoader@3d4eac69         //classloader
                        +-sun.misc.Launcher$ExtClassLoader@66350f69
    classLoaderHash   3d4eac69                                       //classloader 的hash
    fields            modifierprivate,static                     //属性信息
                      type    java.util.Random
                      name    random
                      value   java.util.Random@522b4
                              08a
     
                      modifierprivate
                      type    int
                      name    illegalArgumentCount
     
    Affect(row-cnt:1) cost in 19 ms.
    

    sm:查看已加载类的方法信息

    “Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。

    sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到。

    sc看类信息,sm可以看类的方法信息,两者正好可以结合者来看。

    参数说明

    参数名称 参数说明
    class-pattern 类名表达式匹配
    method-pattern 方法名表达式匹配
    [d] 展示每个方法的详细信息
    [E] 开启正则表达式匹配,默认为通配符匹配
    [c:] 指定class的 ClassLoader 的 hashcode
    [classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name
    [n:] 具有详细信息的匹配类的最大数量(默认为100)

    使用参考

    查看类的方法信息
    $ sm java.lang.String
    java.lang.String-><init>                 
    java.lang.String->equals          //前面为返回值 ->后面为方法名
    java.lang.String->toString
    java.lang.String->hashCode
    java.lang.String->compareTo
    java.lang.String->indexOf
    java.lang.String->valueOf
    java.lang.String->checkBounds
    java.lang.String->length
    java.lang.String->isEmpty
    java.lang.String->charAt
    java.lang.String->codePointAt
    java.lang.String->codePointBefore
    java.lang.String->codePointCount
    java.lang.String->offsetByCodePoints
    java.lang.String->getChars
    java.lang.String->getBytes
    java.lang.String->contentEquals
    java.lang.String->nonSyncContentEquals
    java.lang.String->equalsIgnoreCase
    java.lang.String->compareToIgnoreCase
    java.lang.String->regionMatches
    java.lang.String->startsWith
    java.lang.String->endsWith
    java.lang.String->indexOfSupplementary
    java.lang.String->lastIndexOf
    java.lang.String->lastIndexOfSupplementary
    java.lang.String->substring
    java.lang.String->subSequence
    java.lang.String->concat
    java.lang.String->replace
    java.lang.String->matches
    java.lang.String->contains
    java.lang.String->replaceFirst
    java.lang.String->replaceAll
    java.lang.String->split
    java.lang.String->join
    java.lang.String->toLowerCase
    java.lang.String->toUpperCase
    java.lang.String->trim
    java.lang.String->toCharArray
    java.lang.String->format
    java.lang.String->copyValueOf
    java.lang.String->intern
    Affect(row-cnt:44) cost in 1342 ms.
    
    查看方法的详细信息
    $ sm -d java.lang.String toString
     declaring-class  java.lang.String
     method-name      toString
     modifier         public
     annotation
     parameters
     return           java.lang.String
     exceptions
     
    Affect(row-cnt:1) cost in 3 ms.
    
    

    java -jar arthas-boot.jar --tunnel-server ws://172.16.12.95:7777/ws

    Arthas 基础命令:

    help 查看命令帮助信息

    cls 清空当前屏幕区域

    session 查看当前会话的信息

    reset 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类

    version 输出当前目标 Java 进程所加载的 Arthas 版本号

    history 打印命令历史

    quit 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

    stop 关闭 Arthas 服务端,所有 Arthas 客户端全部退出

    keymap Arthas快捷键列表及自定义快捷键

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

    thread 查看当前 JVM 的线程堆栈信息
    watch 方法执行数据观测
    trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
    stack 输出当前方法被调用的调用路径
    tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
    monitor 方法执行监控
    jvm 查看当前 JVM 信息
    vmoption 查看,更新 JVM 诊断相关的参数
    sc 查看 JVM 已加载的类信息
    sm 查看已加载类的方法信息
    jad 反编译指定已加载类的源码
    classloader 查看 classloader 的继承树,urls,类加载信息
    heapdump 类似 jmap 命令的 heap dump 功能

    相关文章

      网友评论

          本文标题:arthas常用命令

          本文链接:https://www.haomeiwen.com/subject/hepjaltx.html