Arthas干货总结

1 watch  

  watch com.suning.rdrs.admin.controller.RdrsDataCloudController obtainTargetFieldInfo '{params, throwExp}' -x 2

  格式:全限定名 + 空格 + 方法名 + 空格 + 固定写法 +  -x 2 是为了将结果展开

  

返回值表达式实际是一个 ognl 表示,支持一些内置对象:

  • loader
  • clazz
  • method
  • target
  • params
  • returnObj
  • throwExp
  • isBefore
  • isThrow
  • isReturn

watch命令支持按请求耗时进行过滤:

Copy
watch com.example.demo.arthas.user.UserController * '{params, returnObj}' '#cost>200'
Arthas在 watch/trace 等命令时,实际上是修改了应用的字节码,插入增强的代码。显式执行 reset 命令,可以清除掉这些增强代码 

2 jvm

jvm 命令可以打印 JVM 的各种信息   重点信息 

 我们控制台系统的信息 

THREAD
-------------------------------------------------------------------------------------------------------
COUNT 264
DAEMON-COUNT 124
PEAK-COUNT 275
STARTED-COUNT 3184
DEADLOCK-COUNT 0

  • COUNT: JVM 当前活跃的线程数
  • DAEMON-COUNT: JVM 当前活跃的守护线程数
  • PEAK-COUNT: 从J VM 启动开始曾经活着的最大线程数
  • STARTED-COUNT: 从 JVM 启动开始总共启动过的线程次数
  • DEADLOCK-COUNT: JVM 当前死锁的线程数

3  ognl

  ognl '@demo.MathGame@random'

4  trace

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

$ trace demo.MathGame run
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 42 ms.
`---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
    `---[10.611029ms] demo.MathGame:run()
        +---[0.05638ms] java.util.Random:nextInt()
        +---[10.036885ms] demo.MathGame:primeFactors()
        `---[0.170316ms] demo.MathGame:print()

5  stack

  输出当前方法被调用的调用路径

很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。

  $ stack demo.MathGame primeFactors '#cost>5' Press Ctrl+C to abort. Affect(class-cnt:1 , method-cnt:1) cost in 35 ms. ts=2018-12-04 01:35:58;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 @demo.MathGame.run() at demo.MathGame.main(MathGame.java:16)

 

6  thread

  thread 线程号 

  打印线程栈,这个可比jstack方便多了吧

posted on 2020-12-03 10:03  MaXianZhe  阅读(161)  评论(0编辑  收藏  举报

导航