java诊断工具-Arthas(trace命令)接口性能优化

trace命令作用

输出方法路径上的每个节点上耗时。每次只能跟踪一级方法的调用链路。

1、trace demo.MathGame run

作用是持续打印出来,调用该方法的链路以及每步执行时间。

结果里的 #24,表示在run函数里,在源文件的第24行调用了primeFactors()函数。

[0.409579ms]表示该primeFactors方法执行的用时。

[2.069657ms]表示run方法执行的总用时。

找到耗时比较长的步骤进行优化

下图为通过jad demo.MathGame反编译类后的代码

 2、如果生产该接口并发访问量比较大,可以使用如下命令进行次数限制输出

trace demo.MathGame run -n 1

表示输出一次方法trace

3、默认情况下,trace不会包含jdk里的函数调用,如果希望trace jdk里的函数,需要显式设置--skipJDKMethod false

trace --skipJDKMethod false demo.MathGame run

4、调用耗时过滤

trace demo.MathGame run '#cost > 2'

 此时只会过滤出来调用run方法总用时大于2ms的记录trace

  • [0,0,0ms,11]xxx:yyy() [throws Exception],对该方法中相同的方法调用进行了合并,0,0,0ms,11 表示方法调用耗时,min,max,total,count

  • throws Exception 表明该方法调用中存在异常返回,即该方法执行在此位置时抛出了异常。

5、可以用正则表匹配路径上的多个类和函数,一定程度上达到多层trace的效果

trace命令只会trace匹配到的函数里的子调用,并不会向下trace多层。因为trace是代价比较贵的,多层trace可能会导致最终要trace的类和函数非常多。

可以用正则表匹配路径上的多个类和函数,一定程度上达到多层trace的效果。

trace -E com.test.ClassA|org.test.ClassB method1|method2|method3

使用 --exclude-class-pattern 参数可以排除掉指定的类,比如:

trace javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter

接口性能调优案例

https://github.com/alibaba/arthas/issues/1892

官方命令参考

https://arthas.aliyun.com/doc/trace.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值