阿里云Arthas使用——在日志没有输出异常情况下,如何进行线上bug定位 stack命令 和 trace命令

news2024/11/25 18:36:43

在这里插入图片描述

前言

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

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

其他的Arthas博客文章如下:

  • 阿里云的Arthas的使用 & 安装和使用 & 死锁查找案例,重新加载案例,慢调用分析
  • 阿里云Arthas使用——通过watch命令查看类的返回值 & 捞数据出来

目录

  • 前言
  • 引出
  • 使用arthas进行线上bug定位
  • stack命令
  • trace命令
    • 未报异常
    • 定位到异常
  • 进一步分析
    • SpringMVC 的运行流程
  • 总结

引出


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 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

未报异常

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 的运行流程:从客户端发送请求request到springMvc框架返回响应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命名分析调用路径;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1287603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法学习系列(五):N皇后、数独

目录 引言一、N皇后问题代码实现测试 二、数独问题代码实现测试 引言 这个N皇后问题是很典型的一个递归问题,就是还是要掌握,所谓递归其实就是dfs,一层一层深入下去。数独和N皇后的思路是一样的,只不过一些细节不同而已。 一、N…

【恋上数据结构】前缀树 Tire 学习笔记

Tire 需求分析 如何判断一堆不重复的字符串是否以某个前缀开头? 用 Set\Map 存储字符串(不重复)遍历所有字符串进行判断缺点:时间复杂度 O(n) 有没有更优的数据结构实现前缀搜索? Tire(和 Tree 同音&a…

Linux 和 macOS 的主要区别在哪几个方面呢?

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

Hadoop学习笔记(HDP)-Part.08 部署Ambari集群

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Unity-Shader - 2DSprite描边效果

实现一个简单的2D精灵图描边效果,效果如下 实现思路: 可以通过判断该像素周围是否有透明度为 0的值,如果有,则说明该像素位于边缘。 所以我们需要打开alpha blend,即: Blend SrcAlpha OneMinusSrcAlpha&am…

腾讯云轻量应用服务器怎么使用宝塔面板?

腾讯云轻量应用服务器宝塔面板怎么用?轻量应用服务器如何安装宝塔面板?在镜像中选择宝塔Linux面板腾讯云专享版,在轻量服务器防火墙中开启8888端口号,然后远程连接到轻量服务器执行宝塔面板账号密码查询命令,最后登录和…

Apache或Nginx在Linux上配置虚拟主机

在Linux上使用Apache或Nginx配置虚拟主机可以让您在同一台服务器上托管多个网站。这样不仅可以充分利用服务器资源,还能降低每个网站的运营成本。以下是使用Apache和Nginx配置虚拟主机的步骤。 使用Apache配置虚拟主机 安装Apache服务器软件。在终端中使用以下命令…

网络安全(三)-- 网络嗅探及协议分析技术

目标 了解网络嗅探的基本含义了解tcpdump工具的基本用法掌握tcpdump工具抓包保存到文件的方法熟悉wireshark工具的基本用法掌握借助wireshark抓包工具分析简单网络协议的方法 6.1. 概述 网络嗅探是一种常用的数据收集、分析的方法: 黑客常通过网络嗅探获取主机或网络的控制权…

资料分析(花生)

基期A(给出BR或BX) 前期:代入、直除、假设分配隔年前期:求出间隔增长率,再变成第一类考法前期差值:假设分配法求得两个前期作差。 现期B 有增量求现期:求出 X,列不等式即可有增速求现…

uniapp 使用 $emit和$on——$on中无法为data中的变量赋值

问题在于this的指向&#xff0c; 解决办法是使用变量保存$on&#xff0c;其次再为data中的值赋值 以下是具体代码&#xff1a; 1、html代码&#xff1a; <view class"form_picker" click"selePositionFun()"><view class""><inp…

Leetcode 77 组合

题意理解&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 如&#xff1a;n3,k2,则有&#xff1a;12 13 23 一般&#xff0c;我们使用回溯法来解决组合问题。 组合问题没有顺序要求&#xff0c;所以 12 21 是同一个组合&#xff08;如…

centos7安装Elasticsearch7系列

背景 今天公司项目需要使用Elasticsearch7.17.7。所有网上搜索了一番&#xff0c;查到一个很不错安装方式分享给大家。 Elasticsearch官网发布 从 Elasticsearch 7.x 版本开始&#xff0c;Elasticsearch 发行版包括了自己的 JDK。因此&#xff0c;您不需要单独安装 Java。以…

Android View.inflate 和 LayoutInflater.from(this).inflate的区别

前言 两个都是布局加载器&#xff0c;而View.inflate是对 LayoutInflater.from(context).inflate的封装&#xff0c;功能相同&#xff0c;案例使用了dataBinding。 View.inflate(context, layoutResId, root) LayoutInflater.from(context).inflate(layoutResId, root, fals…

CLIP在Github上的使用教程

CLIP的github链接&#xff1a;https://github.com/openai/CLIP CLIP Blog&#xff0c;Paper&#xff0c;Model Card&#xff0c;Colab CLIP&#xff08;对比语言-图像预训练&#xff09;是一个在各种&#xff08;图像、文本&#xff09;对上进行训练的神经网络。可以用自然语…

JS箭头函数

箭头函数 1. 基本语法 // // 一般函数const fn function() {console.log(123);}// 箭头函数const fn () > {console.log(123);}fn()const fn (x) > {console.log(x);}fn(1)// 只有一个形参的时候可以省略小括号const fn x > {console.log(x);}fn(1)// 只有一行代…

基于c++版本链队列改-Python版本链队列基础理解

##基于链表的队列实现 可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”&#xff0c;规定队尾仅可添加节点&#xff0c;队首仅可删除节点。 ##图解 ##基于链表的队列实现代码 class ListNode:"""定义链表"""def __init__(self)…

nodejs微信小程序+python+PHP本科生优秀作业交流网站的设计与实现-计算机毕业设计推荐

通过软件的需求分析已经获得了系统的基本功能需求&#xff0c;根据需求&#xff0c;将本科生优秀作业交流网站功能模块主要分为管理员模块。管理员添加系统首页、个人中心、用户管理、作业分类管理、作业分享管理、论坛交流、投诉举报、系统管理等操作。 随着信息化社会的形成…

Mybatis XML 配置文件

我们刚开始就有说Mybatis 的开发有两种方式: 1.注释 2.XML 注解和 XML 的方式是可以共存的 我们前面说的都是注释的方式,接下来是XML方式 XML的方式分为三步 : 1.配置数据库(配在 application.yml 里面) 这个跟注释的配置是一样的,username应该都是一样的,password记得写…

git常用命令指南

目录 一、基本命令 1、创建分支 2、切换分支 3、合并分支 4、初始化空git仓库 二、文件操作 1、创建文件 2、添加多个文件 3、查看项目的当前状态 4、修改文件 5、删除文件 6、提交项目 三、实际操作 1、创建目录 2、进入新目录 3、初始化空git仓库 4、创建文…

【OpenGauss源码学习 —— (RowToVec)算子】

VecToRow 算子 概述ExecInitRowToVec 函数ExecRowToVec 函数VectorizeOneTuple 函数 ExecEndRowToVec 函数总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在…