深入了解 Arthas:Java 应用程序诊断利器

news2025/2/23 7:15:49

序言

在 Java 应用程序的开发和运维过程中,诊断和解决性能问题是一项非常重要的任务。而 Arthas 作为一款由阿里巴巴开发的 Java 应用程序诊断工具,提供了一系列强大的功能,帮助开发人员实时监控、诊断和调优Java 应用程序。本文将深入介绍 Arthas 的功能、优势以及使用方法。

一、什么是 Arthas

Arthas 是一款由阿里巴巴开发的 Java 应用程序诊断工具,旨在帮助开发人员实时监控、诊断和调优 Java 应用程序。它提供了丰富的命令集合,涵盖了线程、内存、GC、类加载、类结构、方法调用等多个方面的诊断和监控功能。Arthas 支持在运行时对 Java 应用程序进行实时诊断和调试,无需重启应用或者修改代码,能够即时捕捉到应用程序的状态和问题,大大提高了排查和解决问题的效率。

二、快速入门

2.1 下载Arthas

可以从官方网站或者 GitHub 仓库下载 Arthas 的最新版本。

  1. 快速安装

    # 使用 curl 下载 arthas-boot.jar
    curl -O https://arthas.aliyun.com/arthas-boot.jar
    
  2. 全量安装:通过下载链接下载完整的 Arthas。

2.2 启动 Arthas

在命令行中执行如下命令启动 Arthas。

java -jar arthas-boot.jar

成功启动:

image.png

2.3 连接目标应用程序

执行 attach PID 命令连接到目标 Java 应用程序的进程。

image.png

2.4 使用 Arthas 命令

连接成功后,就可以使用 Arthas 提供的各种命令对目标应用程序进行诊断和监控了。

image.png

三、Dashboard

Dashboard 可以实时查看系统的运行状况。

image.png

四、查看入参/返回值/异常

项目在线上运行,如果执行与我们预期不一致时,我们需要观察线上的入参、返回值以及异常情况。Arthas 提供了 watch 命令允许开发者观测线上运行的项目。

例如:我们可以有一个 com.qcgd.controller.TestController#helo 方法需要观测,我们可以按如下方式使用 watch 命令:

image.png

如上图所示,当方法每调用一次,就会打印方法的参数以及返回值信息。

五、在线热更新

倘若我们遇到一个突发情况,需要需要立刻修改线上项目的某段逻辑。因为情况比较紧急,如果重新修改本地项目然后发布项目到线上环境很大可能来不急。Arthas 提供了线上热更新的功能。这个功能主要依靠以下命令:

  1. jad:可以将字节码文件反编译成 java 文件
  2. sc:“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息
  3. redefine/retransform:加载外部的 .class 文件,redefine jvm 已加载的类。

场景假设:我们现需要在线上将 TestController#helo() 方法的返回值修改为 hello Arthas

@RestController
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/helo")
    public String helo() {
        return "hello world";
    }
}

我们可按如下步骤实现:

  1. 使用 jad 命令反编译

    image.png

  2. 打开反编译的 /tmp/TestController.java 文件,修改返回值

    image.png

  3. 使用 sc 命令查找原本 TestController 的类加载器

    image.png

  4. 使用 mc 命令编译修改好的 /tmp/TestController.java 文件

    image.png

  5. 使用 redefine/retransform 命令重新加载编译好的 TestController.class

    image.png

  6. 重新访问接口

    image.png

六、类冲突

在生产环境中,类冲突可能会以各种方式出现。一个常见的例子是当两个不同的依赖项引入了相同的类名但不同版本的类时。例如,假设你的项目依赖于两个库 A 和 B,它们分别引入了不同版本的 Guava 库(Google 的一个 Java 核心库)。库 A 引入了 Guava 21.0 版本,而库 B 引入了 Guava 23.0 版本。现在,如果你的代码在运行时同时使用了这两个库,就可能会发生类冲突。

Arthas 可以通过 classloader 命令可以定位类的加载路径。这个命令可以列出当前 JVM 中所有的类加载器及其加载的类信息。通过查看类加载器树形结构,可以了解到不同类加载器加载的类文件,有助于确定是否存在类冲突问题。例如:

image.png

七、性能热点

Arthas 提供了生成火焰图的功能,可以供开发人员分析定位应用的热点、系统的瓶颈。生成火焰图是通过 profiler 命令,该命令的原理是不断进行数据采样,然后将采样结果生成火焰图。

  1. 启动 profiler

    profiler start
    
  2. 查看数据已采集的数量

    profiler getSamples
    
  3. 查看 profiler 状态

    profiler status
    
  4. 生成火焰图

    # 指定生成的格式是 html
    profiler stop --format html
    

    image.png

八、WebConsole

如果开发人员不喜欢在 linux 终端操作 Arthas。也可以在连接到 java 进程之后使用 WebConsole 执行 Arthas 命令。

image.png

访问效果:

image.png

九、FAQ

  1. Arthas 是基于 JDK 环境的,如果服务器只有 JVM 环境不可以直接使用。如果环境是 JVM 或容器可以通过 jattach + Arthas 的方式解决。具体参考这篇文章。
  2. Arthas 可以进行集群管理,具体操作可参考官方文档

往期推荐

  1. EasyExcel 处理 Excel
  2. 实体映射解决方案-MapStruct
  3. 动态切换数据源的最佳实践
  4. Gateway
  5. 缓存神器-JetCache

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

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

相关文章

光伏光热一体化技术PVT

1、PVT集热器简介 太阳能光伏光热一体化组件主要由光伏与光热两个部分组成。光伏部分采用技术成熟的太阳能光伏面板,通过控制系统为建筑提供所需电能,主要包括光伏电池、蓄电池、逆变器和控制器等构件。光热部分主要为集热器,将太阳能转换为热…

禅道项目管理系统 身份验证漏洞分析QVD-2024-15263

前言 最近不怎么更新了!向小伙伴说明下 我不是什么组织 更不什么经销号(尽管csdn有很多经销广告号) 一确实是下岗了!忙着为找工作而发愁。简历都投出去如同石沉大海能不愁吗!.哎...... 二是忙着论文及材料的事...…

领域驱动设计(DDD)笔记(一)基本概念

文章链接 领域驱动设计(DDD)笔记(一)基本概念-CSDN博客领域驱动设计(DDD)笔记(二)代码组织原则-CSDN博客领域驱动设计(DDD)笔记(三)后…

嵌入式开发四:STM32 基础知识入门

为方便更好的学习STM32单片机,本篇博客主要总结STM32的入门基础知识,重点在于理解寄存器以及存储器映射和寄存器映射,深刻体会STM32是如何组织和管理庞大的寄存器,从而提高开发效率的,为后面的基于标准库的开发做好铺垫…

Elasticsearch:对 Java 对象的 ES|QL 查询

作者:Laura Trotta ES|QL 是 Elasticsearch 引入的一种新的查询语言,它将简化的语法与管道操作符结合起来,使用户能够直观地推断和操作数据。官方 Java 客户端的新版本 8.13.0 引入了对 ES|QL 查询的支持,提供了一个新的 API&…

手撸Mybatis(四)——连接数据库进行简单查询

本专栏的源码:https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 添加数据库操作模板 对于JDBC操作,一般包括以下几个步骤: 1)注册驱动 2)建立连接 3)执行sql语句 4)处理结果 5&#xff09…

【neteq】tgcall的调用、neteq的创建及接收侧统计

G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…

Boosting算法揭秘:从原理到scikit-learn实战

Boosting算法揭秘:从原理到scikit-learn实战 在机器学习的江湖中,Boosting算法以其强大的预测能力和独特的训练方式占据了一席之地。与Bagging算法并行训练的理念不同,Boosting算法更注重模型的串行迭代和错误修正。本文将从Boosting算法的基…

JVM笔记1--Java内存区域

1、运行时数据区域 从上图可以看出来,Java虚拟机运行时数据区域整体上可以分成5大块: 1.1、程序计数器 程序计数器是一块较小的内存空间。它可以看做当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是…

【热门话题】Chrome 插件研发详解:从入门到实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Chrome 插件研发详解:从入门到实践一、引言二、Chrome 插件基础概念…

汇编语言——输入两个字数据(16位的数)X,Y,计算Z=X+Y,并把Z的结果显示出来

文章目录 以2进制输入,2进制输出(无符号)以2进制输入,2进制输出(带符号)以8进制输入,8进制输出以10进制输入,10进制输出以16进制输入,16进制输出 仅供参考 X、Y的输入可…

08 - 步骤 表输出

简介 表输出(Table Output)步骤是用于将 Kettle 中的数据写入关系型数据库表的步骤。它允许用户将数据流中的数据插入、更新或删除到目标数据库表中。 使用 场景 我要将处理完的数据流中的sysOrgCode 跟 plateNumber 保存记录到mysql 1、拖拽表输出…

目标检测算法YOLOv5简介

没有关于YOLOv5的直接论文,YOLOv5由Ultralytics维护,源码见:https://github.com/ultralytics/yolov5 ,于2020年6月发布v1.0版本,最新发布版本为v7.0,License为AGPL-3.0. 以下内容主要来自: 1. U…

MyScaleDB:SQL+向量驱动大模型和大数据新范式

大模型和 AI 数据库双剑合璧,成为大模型降本增效,大数据真正智能的制胜法宝。 大模型(LLM)的浪潮已经涌动一年多了,尤其是以 GPT-4、Gemini-1.5、Claude-3 等为代表的模型你方唱罢我登场,成为当之无愧的风口…

【R语言数据分析】卡方检验

目录 交叉卡方检验 配对卡方检验 趋势卡方检验 交叉卡方检验 交叉卡方表用于比较组间“率”的差异。适用于分类型变量,被检验的分类变量应该是无序分类变量,分组变量可以是有序分组也可以是无序分组。比如比较两种药物治疗某个疾病的效率,…

Bartender 5 - MacBook菜单栏图标管理软件

当 macOS 桌面图标太多时,既不美观又经常会相互遮盖,非常影响操作。 苹果现在还把「刘海屏」发扬光大,MacBook 的菜单栏是越来越不方便了! 如果你希望 Mac 的菜单栏干净清爽、又方便易用,那「Bartender 5」你一定要试…

第15章 基于规格说明的测试技术

一、概述 (一)依据 《软件需求规格说明书》以及对应的模型或用户需求。 (二)特点 不考虑内部结构和内部特征 (三)测试用例满足的标准 利用黑盒测试技术导出测试用例 (四)测试…

基于 Wireshark 分析 ICMP 协议

一、ICMP 协议 ICMP(Internet Control Message Protocol)即互联网控制报文协议,是TCP/IP协议簇的一个子协议。它主要用于在IP主机、路由器之间传递控制消息,这些消息涉及网络是否通畅、主机是否可达、路由是否可用等关于网络本身…

2024年北京高校后勤餐饮博览会|北京餐饮展览会

高联采高校后勤餐饮博览会 暨第25届北京高校后勤餐饮联合招标采购大会 同期举办:中国北京餐饮供应链博览会 主 题: 因为FOOD校园GOOD / 同创高校大舞台共享精彩高联采 时 间:2024年9月21日-22日 地 点:中国国际展览中心&…

利用大模型提升个性化推荐的异构知识融合方法

在推荐系统中,分析和挖掘用户行为是至关重要的,尤其是在美团外卖这样的平台上,用户行为表现出多样性,包括不同的行为主体(如商家和产品)、内容(如曝光、点击和订单)和场景&#xff0…