arthas命令详解二(dump、classloader、monitor、watch、trace、stack、tt、options、profile等使用)

本文详细介绍了Arthas工具中与类和类加载器相关的命令,如dump用于保存字节码,classloader展示ClassLoader信息,以及monitor、watch、trace和stack用于监控方法执行、调用路径和性能分析。同时涵盖了如何使用profiler生成热力图进行性能诊断。

        上文中我们介绍arthas一些基本命令的使用,可以通过那些命令完成一些像反编译、追踪class,查看类方法等,本文将详细介绍类和类加载器有关的命令。

1、dump(将已加载类的字节码文件保存到特定目录 )

        保存的默认路径为:~/logs/arthas/classdump/;不同的类加载器放在不同的目录下。

# 把String类的字节码文件保存到~/logs/arthas/classdump/目录下
dump java.lang.String
# 把demo包下所有的类的字节码文件保存到~/logs/arthas/classdump/目录下
dump demo.*
2、classloader(获取类加载器信息)

        classloader命令将 JVM 中所有的classloader的信息统计出来。具体使用参数如下:

参数名称参数说明
[l]按类加载实例进行统计
[t]打印所有ClassLoader的继承树
[a]列出所有ClassLoader加载的类,请谨慎使用
[c:]ClassLoader的hashcode
[c: r:]用ClassLoader去查找resource
[c: load:]用ClassLoader去加载指定的类
# 1、默认按类加载器的类型查看统计信息
classloader
# 2、按类加载器的实例查看统计信息,可以看到类加载的hashCode
classloader -l
# 3、查看ClassLoader的继承关系
classloader -t
# 4、通过类加载器的hash,查看此类加载器实际所在的位置
classloader -c 28bb0d54
# 5、使用ClassLoader去查找类的class文件所在的位置
classloader -c 28bb0d54 -r java/lang/String.class
# 6、使用ClassLoader去加载类
classloader -c 70dea4e --load java.lang.String

3、 monitor(监控指定类中方法的执行情况 )

               用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息。

# 过5秒监控一次,类demo.MathGame中primeFactors方法(c参数默认是120秒)
monitor -c 5 demo.MathGame primeFactors

监控参数说明
timestamp时间戳
classJava类
method方法(构造方法、普通方法)
total调用次数
success成功次数
fail失败次数
rt平均耗时
fail-rate失败率
4、 watch(观察指定方法调用情况)

        

参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
express观察表达式
condition-express条件表达式
[b]方法调用之前观察 before,默认关闭
[e]方法异常之后观察 exception,默认关闭
[s]方法返回之后观察 success,默认关闭
[f]方法结束之后(正常返回和异常返回)观察 finish,默认打开
[E]开启正则表达式匹配,默认为通配符匹配
[x:]指定输出结果的属性遍历深度,默认为 1
# 1、观察demo.MathGame类中primeFactors方法出参和返回值,结果属性遍历深度为2。params表示所有参数数组,returnObject表示返回值
watch demo.MathGame primeFactors "{params,returnObj}" -x 2
# 2、观察方法入参,对比1,返回值为空(事件点为方法执行前,因此获取不到返回值)
watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b
# 3、观察当前对象中的属性,如果想查看方法运行前后,当前对象中的属性,使用target关键字,代表当前对象
watch demo.MathGame primeFactors 'target' -x 2
# 4、同时观察方法调用前和方法返回后,参数里-n 2,表示只执行两次。输出结果中,第一次输出是方法调用前的观察表达式的结果,第二次输出的是方法返回后的表达式的结果params表示参数,target表示执行方法的对象,returnObject表示返回值
watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2
 5、trace(对方法内部调用路径进行追踪 )

               对方法内部调用路径进行追踪,并输出方法路径上的每个节点上耗时。

参数名称参数说明
class-pattern类名表达匹配
method-pattern方法名表达式匹配
[E]开启正则表达式匹配,默认是通配符匹配
[n:]设置命令执行次数
#cost方法执行耗时,单位是毫秒
# 1、trace 追踪指定类的指定方法
trace demo.MathGame run
# 2、如果方法调用的次数很多,那么可以用-n参数指定捕捉结果的次数
trace demo.MathGame run -n 1
# 3、默认情况下,trace不会包含jdk里的函数调用,如果希望trace jdk里的函数,需要显式设置--skipJDKMethod false
trace --skipJDKMethod false demo.MathGame run
# 4、根据调用耗时过滤,trace大于0.5ms的调用路径
trace demo.MathGame run '#cost > .5'

 6、stack(输出当前方法被调用的调用路径 )

        

# 1、获取primeFactors的调用路径
stack demo.MathGame primeFactors
# 2、条件表达式来过滤,第0个参数的值小于0,-n表示获取2次
stack demo.MathGame primeFactors 'params[0]<0' -n 2
# 3、根据执行时间来过滤,耗时大于0.5毫秒
stack demo.MathGame primeFactors '#cost>0.5'

7、 options(全局开关)

所有选项:options

# 1、获取options值
options dump
# 2、修改options值
options dump true

 8、profiler 热力图
# 1、启动
profiler start
# 2、关闭 (默认情况下,生成的结果保存到应用的工作目录下的 arthas-output目录。可以通过 --file参数来指定输出结果路径)
profiler stop
profiler stop --file /tmp/output.svg
profiler stop --format html  # 生成html
# 3、查看状态
profiler status
# 4、查看热力图
http://localhost:3658/arthas-output/ 

注:

        y 轴表示调用栈,每一层都是一个函数。调用栈越深,热力就越高,顶部就是正在执行的函数,下方都是它的父函数。

        x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

        热力图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。颜色没有特殊含义,因为热力图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

        本人是一个从小白自学计算机技术,对前端、运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其_所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值