在这里插入图片描述

前言

Arthas一款线上监控诊断产品通过全局视角实时查看应用 load内存gc线程状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参异常监测方法执行耗时,类加载信息等,大大提升线上问题排查效率

本篇博客介绍如何日志没有输出异常情况下,如何进行线上bug定位使用到了stack命令trace命令

其他的Arthas博客文章如下

引出


1.JVM调优工具阿里云的Arthas使用安装和使用;
2.watch命令查看调用方法输出参数
3.stack定位方法调用堆栈
4.trace命名分析调用路径

使用arthas进行线上bug定位

前端访问链接报错

在这里插入图片描述

定位调用controller

在这里插入图片描述

com.wattsonic.iot.gateway.controller.TestController#getLatestReportData

stack命令

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

在这里插入图片描述

stack com.wattsonic.iot.gateway.controller.TestController getLatestReportData 

在这里插入图片描述

trace命令

trace 命令能主动搜索 classpatternmethodpattern 对应方法调用路径,渲染统计整个调用链路上的所有性能开销和追踪调用链路

未报异常

trace org.springframework.web.method.support.InvocableHandlerMethod doInvoke

在这里插入图片描述

定位到异常

trace org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter handle

在这里插入图片描述

`---ts=2023-12-05 10:16:26;thread_name=http-nio-8082-exec-4;id=4e;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@5f45bc8e
    `---[1.108864ms] org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter:handle() [throws Exception]
        +---[80.80% 0.895941ms ] org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter:handleInternal() #87 [throws Exception]
        `---throw:org.springframework.http.converter.HttpMessageConversionException #462 [Type definition error: [simple type, class com.google.protobuf.UnknownFieldSet$Parser]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.google.protobuf.UnknownFieldSet$Parser and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.concurrent.ConcurrentHashMap["S231027J0043"]->com.wattsonic.iot.gateway.bolt.protocol.beta.Level2["unknownFields"]->com.google.protobuf.UnknownFieldSet["parserForType"])]

在这里插入图片描述

一步分析

这里定位trace哪个类的时候本质用到了SpringMVC 的运行流程:从客户端发送请求requestspringMvc框架返回响应response的全流程,理解其流程。

SpringMVC 的运行流程

相关博客文章如下

SpringMvc框架——【深入】SpringMVC 的运行流程:从客户端发送请求request到springMvc框架返回响应response的全流程分析 & DispatcherServlet

在这里插入图片描述

(1)整个过程开始于客户端发出的一个HTTP请求,Web应用服务器收到这个请求。如果匹配DispatcherServlet请求映射路径,则Web容器将该请求转交给DispatcherServlet处理

(2)DispatcherServlet作用是将请求分发不同处理器:DispatcherServlet收到这个请求后,根据请求的信息(包括URL、HTTP方法、请求报文头、请求参数、Cookies等)及HandlerMapping配置找到处理该请求的处理器(Handler);

(3)可将HandlerMapping看做路由控制器,将Handler看做目标主机;值得注意的是,在Spring MVC中并没有定义一个Handler接口,实际上任何一个Object可以成为请求处理器(任何一个对象可以作为请求的Handler);

(4)当DispatcherServlet根据HandlerMapping得到对应当前请求的Handler后,通过HandlerAdapter对Handleri进行封装,再以统一适配器接口调用Handler;HandlerAdapter是Spring MVC框架接口,顾名思义,HandlerAdapter是一个适配器,它用统一接口对各种Handler方法进行调用;

(5)处理器Handler完成业务逻辑处理后,将返回一个ModelAndView给DispatcherServlet,其中ModelAndView包含视图逻辑名和模型数据信息,ModelAndView顾名思义,包含数据模型以及相应的视图的信息

(6)ModelAndView中包含的是”逻辑视图名”而非真正的视图对象,DispatcherServlet借由视图解析器ViewResolver完成逻辑视图名到真实视图对象解析工作

(7)当得到真正的视图对象后,DispatcherServlet利用视图对象模型数据进行渲染

(8)客户端得到响应可能一个普通的HTML页面,也可以是XML或JSON字符串,还可以一张图片或者一个PDF文件


总结

1.JVM调优工具阿里云的Arthas的使用,安装和使用;
2.watch命令查看调用方法的输出参数
3.stack定位方法调用堆栈
4.trace命名分析调用路径;

原文地址:https://blog.csdn.net/Pireley/article/details/134804127

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47588.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注