Arthas线上环境问题排查定位工具

2024-06-17 00:36

本文主要是介绍Arthas线上环境问题排查定位工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、Arthas简介

Arthas是alibaba推出的一款JVM性能诊断调优的工具,也可以称之为是线上监控诊断产品,通过全局的视角可以实时的查看应用load、内存、GC、线程的状态信息,并且还可以在不修改应用代码的前提下,对业务问题进行诊断,包括查看方法调用的出参、入参、异常等,监测方法执行耗时,类加载信息等等,大大提升了线上问题的排查效率。

二、Arthas场景

一般情况下,本地开发环境不能访问生产环境,如果在生产环境中遇到了问题,那么就无法使用IDE远程调试,更加糟糕的是在生产环境中调试是不可接受的,因为它会停止所有线程,导致服务暂停。

开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题,但是某些问题无法在不同的环境中轻松的复现,甚至在重启后就消失了。

如果考虑在代码中添加一些日志帮助解决问题,就必须经历以下阶段:测试、预发、然后生产,这种方法效率比较低,更糟糕的是,该问题可能无法解决,因为一旦JVM重新启动,可能无法复现。

那么Arthas可以解决这些问题,开发人员可以在线解决生产问题,无需JVM启动,无需代码更改,Arthas作为观察者永远不会暂停正在运行的线程。

三、Arthas解决哪些问题?

  • 这个类从哪个jar包加载的,为什么各种报错
  • 我改的代码为什么没有执行到?难道是我没有Commit?分支搞错了?
  • 遇到问题无法在线上debug,难道只能通过加日志在重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法debug,线下无法重现
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到JVM的实时运行状态?
  • 怎么快速定位应用的热点,生成火焰图?
  • 怎样直接从JVM内查找某个类的实例?

四、Arthas下载

curl -O https://arthas.aliyun.com/arthas-boot.jar

五、Arthas启动

  • 启动arthas-boot.jar
java -jar arthas-boot.jar
  • 选择监控的应用进程

    • 这个时候会列出所有可监控的应用进程,输入对应的编号即可

    在这里插入图片描述

六、全局监控仪表

  • dashboard

    • dashboard命令,可以实时的显示出所有线程的情况、内存的情况、运行环境信息、cpu占用等情况。

    在这里插入图片描述

  • thread

    • thread命令,可以显示出所有线程信息

    在这里插入图片描述

  • thread id

    • thread 线程对应的ID,可以显示线程的具体信息

    在这里插入图片描述

七、方法级别监控

我们在调优的时候,需要定位到应用的具体方法,所以arthas提供了一套对于方法的监控,但是方法的监控我们需要手动输入很多参数,为了方便,我们就在IDEA中安装arthas idea插件,可以自动生成带参数的命令,只需要复制即可。

1、安装插件

在这里插入图片描述

在这里插入图片描述

2、watch

watch命令用来查看方法的一些具体信息,比如入参、出参、异常等情况。

-n:执行次数

-x:每次调用监控的层级深度

watch com.cy.example.Demo testHandler '{params,returnObj,throwExp}'  -n 5  -x 3 

在这里插入图片描述

3、trace

trace命令用于查看方法的运行耗时

-n:执行次数

trace com.cy.example.Demo testHandler  -n 5 --skipJDKMethod false 

在这里插入图片描述

3、stack

stack命令用于查看该方法在哪被调用了

-n:执行次数

stack com.cy.example.Demo testHandler  -n 5 

在这里插入图片描述

八、类级别监控

1、sc

sc命令:查看JVM已加载的类信息

# 显示JVM已加载的类信息
sc com.cy.example.Demo # 打印出类信息
sc -d com.cy.example.Demo

在这里插入图片描述

2、sm

sm命令:查看JVM已加载类的方法信息

# 查看加载类的方法信息
sm com.cy.example.Demo# 查看加载类的方法详细信息
sm -d com.cy.example.Demo# 查看加载类的指定方法信息
sm com.cy.example.Demo testHandler# 查看加载类的指定方法的详细信息
sm -d com.cy.example.Demo testHandler

在这里插入图片描述

在这里插入图片描述

九、线上问题定位

当项目已经上线,出了问题我们需要进行问题定位,可以从以下几点进行查看:

  • 代码版本是否引入正确
  • CPU占用率过高,哪个程序占用过高
  • 死锁的问题

1、反编译

反编译的方式很多,但是大多数都是在开发环境进行反编译,我们需要在线上环境进行反编译,从而能看出我们的代码版本是否引入正确,可能代码版本是1.4,我们引入的是1.3

jad 反编译类名
jad com.cy.example.Demo

在这里插入图片描述

2、CPU占用率

# 展示出CPU占用率从高到低指定个数的线程
thread -n 3

在这里插入图片描述

3、死锁

可以通过命令直接查看所有的死锁

我这里没有写死锁的代码,因此没有死锁

thread -b

在这里插入图片描述

十、线上代码热更新

在不停止线上服务的情况下修改代码

需要注意的是,热更新的字节码文件不能新增属性和方法,并且热更新后原来的类不能恢复

# 通过jad对文件进行反编译,并且输出到其他地方
jad Demo > /usr/NewDemo.java# 对NewDemo.java进行更改代码# 使用mc在内存中对NewDemo.java进行编译
mc /usr/NewDemo.java -d /usr# 热更新
redefine /usr/NewDemo.class

这篇关于Arthas线上环境问题排查定位工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067992

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高