使用Profile神器Arthas排查线上问题

1、Arthas 利用 spring applicationContext获取任何Bean

RequestMappingHandlerAdapter父接口ApplicationObjectSupport存在获取spring上下文方法getApplicationContext()

在这里插入图片描述

  • 执行任何一次请求, tt -t记录RequestMappingHandlerAdapter请求
    排查问题时经常需要测试同学的配合重新发起请求,arthas为减少这种麻烦,提供了tt命令支持重放请求
tt -t  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod

在这里插入图片描述

  • 执行tt命令获取Spring Application Context
    执行tt命令的-i参数来指定index,并且用-w参数来执行ognl表达式来获取spring context
tt -i 1000 -w 'target.getApplicationContext()

在这里插入图片描述

  • 从Spring context中获取任何Bean对象
tt -i 1000 -w 'target.getApplicationContext().getBean("authConfigServiceImpl").listByLocationCode("510000")'

在这里插入图片描述

应用场景:

  • 生产环境的任务是定时触发的,发生了异常,比如1天触发一次,又没有界面重新实时触发任务,这时就可以通过arthas Spring context获取业务的Bean对象重新触发一次任务方法。

2、Arthas 利用 trace记录方法的调用链路,并输出方法路径上的每个节点上耗时

trace 能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,trace 在执行的过程中本身是会有一定的性能开销,在统计的报告中并未像 JProfiler 一样预先减去其自身的统计开销

trace com.alibaba.dubbo.rpc.Filter * '#cost > 1000' -n 1

-n 参数指定捕捉结果的次数
'#cost>100'表示当执行时间超过100ms的时候,才会输出trace的结果

3、Arthas 排查404问题

Java web中Servlet、Filter、Listener的优先级listener>filter>servlet
Listener是用于监听事件,Filter就是用来拦截进行一些日志类似aop的功能,而Servlet就是转发到别的页面。

trace javax.servlet.Filter * -n 1
  • 通过trace Servlet/Filter,可以快速定位Java Web问题
  • trace是了解应用执行流程的利器,只要trace到关键的接口或者类上
  • 仔细观察trace的结果,可以学习到Spring MVC是处理Web请求细节

4、如何在内部类对象中访问外部类对象的成员变量

class ServerImpl implements TimeSource {

    private Set<HttpConnection> allConnections;

    class ServerTimerTask extends TimerTask {
        ServerTimerTask() {
        }

        public void run() {
            
           // do something
        }
    }
}

想在内部类的run方法里面,访问allConnections这个变量的大小,应该如何写ognl表达式?

watch sun.net.httpserver.ServerImpl$ServerTimerTask1 run -f "target.this$0.allConnections.size()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值