在这里插入图片描述

前言

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_48956.html

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

发表回复

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