Arthas(阿尔萨斯)

一、Arthas 是什么?

Arthas(阿尔萨斯)是阿里巴巴开源的一款 Java 在线诊断工具,基于 Java Agent 和字节码增强技术实现。它无需重启 JVM,即可动态追踪代码执行、实时查看 JVM 状态、修改代码逻辑,是生产环境问题排查的“瑞士军刀”。

核心特点:

  • 无侵入:无需修改代码或重启应用。

  • 动态追踪:实时监控方法调用、参数、返回值。

  • 热修复:直接修改运行时代码(慎用)。

全平台支持:支持 Linux/Windows/macOS,兼容 JDK 6+。

二、 Arthas(阿尔萨斯)能为你做什么?

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

Arthas 支持 JDK 6+(4.x 版本不再支持 JDK 6 和 JDK 7),支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

三、安装与启动

  1. 快速安装
# 下载最新版本
curl -O https://arthas.aliyun.com/arthas-boot.jar
  1. 启动并附加到目标 JVM
java -jar arthas-boot.jar
启动后,Arthas 会列出所有 Java 进程,输入序号选择要诊断的进程。

在这里插入图片描述

  1. 退出 Arthas
  • 输入 stop:关闭当前连接。
  • 输入 quit:退出客户端(不关闭 Arthas 服务端)。

四、核心命令详解

  1. 基础命令
命令作用
help查看所有命令帮助
dashboard实时监控 JVM 状态(CPU、内存、线程)
version显示 Arthas 版本
history查看命令历史记录

示例:

# 实时监控 JVM 仪表盘(类似 top)
dashboard
  1. 类/方法诊断
命令作用
sc (Search Class)查找已加载的类信息
sm (Search Method)查看类的方法详情
jad反编译指定类的字节码
redefine热替换类(需提前编译好.class 文件)

示例:

# 反编译 com.example.MyService 类
jad com.example.MyService# 热替换类(替换后立即生效)
redefine /path/to/MyService.class
  1. 方法调用追踪
命令作用
watch观察方法入参、返回值、异常
trace追踪方法内部调用链路及耗时
stack查看方法被调用的调用栈
monitor统计方法调用次数、成功率、平均耗时

示例:

# 监控方法入参和返回值(-n 表示监控次数,-x 表示展开层级)
watch com.example.MyService doSomething "{params, returnObj}" -n 5 -x 3# 追踪方法内部调用链路及耗时(耗时单位 ms)
trace com.example.MyService processOrder -n 3
  1. 线程/堆内存分析
命令作用
thread查看线程状态、CPU 占用、阻塞点
heapdump生成堆转储文件(类似 jmap -dump)
vmtool直接操作 JVM 对象(查询/修改字段值)

示例:

# 查找 CPU 占用最高的线程
thread -n 3# 生成堆转储文件到指定路径
heapdump --live /tmp/heap.hprof
  1. 高级功能
命令作用
ognl执行任意 OGNL 表达式(调用静态方法等)
profiler生成火焰图(需配合 async-profiler)
logger动态修改日志级别(如临时开启 DEBUG 日志)

示例:

# 调用静态方法获取系统属性
ognl '@java.lang.System@getProperty("user.dir")'# 动态调整日志级别为 DEBUG
logger --name ROOT --level debug

五、实战案例

案例 1:定位接口超时问题

# 1. 追踪方法调用链路及耗时
trace com.example.OrderController createOrder# 2. 观察某个方法的参数和返回值
watch com.example.UserService getUserById "{params, returnObj}" -x 3# 3. 发现某个 SQL 查询慢,临时打印执行的 SQL 日志
logger --name org.hibernate.SQL --level DEBUG

案例 2:紧急修复空指针异常

# 1. 反编译问题类
jad --source-only com.example.BugService > BugService.java# 2. 本地编辑代码,添加空指针判断,重新编译
javac BugService.java# 3. 热替换类(立即生效)
redefine /path/to/BugService.class

六、Arthas IDEA插件

Arthas的命令太多了,推荐一款插件
在 IDEA 的插件市场搜索 arthas idea,点击 Install, 重启 IDEA 生效
在这里插入图片描述

  • 优点
    1‌. 生成Arthas命令‌:IDEA插件可以自动生成Arthas命令,方便用户使用。虽然一些基础命令如thread、jvm、dashboard等建议用户手动输入以加快操作速度‌
    2.‌ 性能分析‌:使用trace命令选择项目中的方法进行链路跟踪,粘贴到控制台监听调用接口,观察结果以定位问题方法或数据库查询‌

在这里插入图片描述

  • 基础使用教程
    生成 Arthas 命令
    操作步骤:
在代码编辑器中,右键点击 类名 或 方法名。选择 Arthas Command → 选择需要的命令(如 watch、trace)。自动生成命令并复制到剪贴板,粘贴到 Arthas 控制台执行。

示例:生成 trace 命令

右键点击目标方法(如 UserService.getUserById())。选择 Arthas Command → trace method。生成命令:trace com.example.UserService getUserById -n 5 -v。粘贴到 Arthas 控制台,观察方法内部调用链路及耗时。

七、Arthas 优缺点

  • 优点
    零成本接入:无需重启应用,生产环境友好。

    功能全面:覆盖诊断、监控、热修复全场景。

    动态性:实时修改代码逻辑或日志级别。

    社区活跃:阿里巴巴持续维护,文档丰富。

  • 缺点
    学习曲线:需熟悉大量命令和参数。

    安全风险:热替换可能引发不稳定(需严格测试)。

    性能开销:高频追踪方法可能增加 CPU 负载。

八、最佳实践

  • 生产环境慎用写操作:优先使用 watch/trace 等只读命令。

  • 限制监控范围:避免全量监控(使用 -n 限制监控次数)。

  • 结合日志分析:先用 Arthas 定位问题范围,再通过日志深挖。

  • 火焰图分析:对性能问题使用 profiler 生成火焰图。

  • 权限管控:禁止非授权人员访问生产环境 Arthas。

九、与其他工具对比

工具优势局限性
jstack轻量级线程快照只能手动触发,无持续监控
JProfiler可视化性能分析需安装客户端,付费
Arthas动态追踪、热修复、无需重启命令行操作,学习成本较高

十、总结

Arthas 是 Java 开发者诊断线上问题的终极工具,尤其擅长:

  • 实时方法级追踪:无需加日志即可观察代码执行细节。

  • 动态热修复:紧急修复线上问题(最后手段)。

  • 低开销监控:替代部分 jmap/jstack 功能。

学习资源:

  • 官方文档:https://arthas.aliyun.com/doc/

  • GitHub 仓库:https://github.com/alibaba/arthas

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

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

相关文章

深入解读Qwen3技术报告(三):深入剖析Qwen3模型架构

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容&#xff…

UE4游戏查找本地角色数据的方法-SDK

UE4中,玩家的表示通常涉及以下几个类: APlayerController: 代表玩家的控制逻辑,处理输入等。 APawn: 代表玩家在世界中的实体(比如一个角色、一辆车)。APlayerController 控制一个 APawn。 ACharacter: APawn 的一个…

springboot+vue实现服装商城系统(带用户协同过滤个性化推荐算法)

今天教大家如何设计一个服装商城 , 基于目前主流的技术:前端vue3,后端springboot。 同时还带来的项目的部署教程。 系统最大的亮点是使用了两个推荐算法: 1. 基于Jaccard算法的用户浏览历史推荐。 2. 基于用户的协同过滤算法个性化推荐。 还有核心的商…

ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问

有可能是设置了代理 unset ALLPROXY 或者注释掉 当然也有可能是其他原因 权限不足​​ 以管理员身份运行 CMD/PowerShell,或使用 --user 安装 ​​文件被占用​​ 关闭杀毒软件或重启电脑 Python 环境损坏​​ 重新安装 Python 或使用虚拟环境 ​​ 杀毒软件阻止…

【深尚想!爱普特APT32F1023H8S6单片机重构智能电机控制新标杆】

在智能家电与健康器械市场爆发的今天,核心驱动技术正成为产品突围的关键。传统电机控制方案面临集成度低、开发周期长、性能瓶颈三大痛点,而爱普特电子带来的APT32F1023H8S6单片机无感三合一方案,正在掀起一场智能电机控制的技术革命。 爆款基…

一个.NET开源、轻量级的运行耗时统计库

前言 在.NET开发中,为了准确统计对应方法的执行时间,我们最常用的方式是手动使用 Stopwatch 来显式编写计时逻辑,但是假如你需要大量的使用 Stopwatch 来进行耗时统计的话不利于保持代码的整洁和增加代码的维护成本。 项目介绍 MethodTime…

嵌入式鸿蒙openharmony应用开发环境搭建与工程创建实现

各位小伙伴大家好,本周开始分享鸿蒙开发相关的内容,从基础的配置方法到各种功能的实现,探索国产操作系统的奥秘。 第一:观察结果 第二:开源语言 ArkTS是鸿蒙应用开发中使用的TypeScript超集,提供了一套丰富的API来构建应用界面和逻辑。 第三:环境搭建 步骤 1 通过如…

软考 组合设计模式

组合设计模式(Composite Pattern)是结构型设计模式之一,它的核心思想是将对象组合成树形结构来表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 主要概念: 组件(Component&a…

vue 中的v-once

&#x1f530; 基础理解 ✅ 语法&#xff1a; <span v-once>{{ msg }}</span>✅ 效果&#xff1a; • 只渲染一次&#xff0c;之后无论数据如何变化&#xff0c;该内容都不会更新。 • 非常适用于静态内容或首次加载后不需要变化的数据。&#x1f9ea; 示例&…

GPU训练和call方法

知识点回归: CPU性能的查看:看架构代际、核心数、线程数GPU性能的查看:看显存、看级别、看架构代际GPU训练的方法:数据和模型移动到GPU device上类的call方法:为什么定义前向传播时可以直接写作self.fc1(x)import torch import torch.nn as nn import torch.optim as opti…

人脸识别备案开启安全防护模式!紧跟《办法》!

国家互联网信息办公室与公安部于 2025 年 3 月 13 日联合公布了《人脸识别技术应用安全管理办法》&#xff08;以下简称《办法》&#xff09;&#xff0c;并自 2025 年 6 月 1 日起正式施行。其中&#xff0c;人脸识别备案成为了规范技术应用、守护信息安全的关键一环。​ 一、…

LeetCode:贪心算法

目录 一、分发饼干 二、摆动序列 三、最大子数组和 四、买卖股票的最佳时机II 五、跳跃游戏 六、跳跃游戏II 七、K次取反后最大化的数组和 八、加油站 九、分发糖果 十、柠檬水找零 十一、根据身高重建队列 一、分发饼干 455. 分发饼干 - 力扣&#xff08;LeetCode…

企业级 Hosts 自动化管理实战:基于 HTTP 检测的高可用域名解析方案

摘要 本文针对企业级域名解析稳定性需求&#xff0c;提供一套从IP 检测到Hosts 更新的完整自动化解决方案。通过 HTTP 状态码检测、权威 DNS 解析、原子化文件操作等核心技术&#xff0c;结合多行业真实案例&#xff0c;详细阐述方案设计、脚本实现与生产部署&#xff0c;帮助…

基于springboot+vue网页系统的社区义工服务互动平台(源码+论文+讲解+部署+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统背景 在社会文明程度不断提升、社区治理需求持续深化的大背景下&#xff0c;社区义工服务作为…

从细胞工厂到智能制造:Extracellular 用时序数据库 TDengine 打通数据生命线

作为一家位于英国的前沿生物科技公司&#xff0c;Extracellular 专注于细胞培养产品的规模化制造&#xff0c;致力于通过优化生物工艺流程&#xff0c;加速细胞类产品从实验室走向大规模生产的落地。为了实现这一目标&#xff0c;他们需要一个稳定、高效、可扩展的数据平台&…

【NLP 77、Python环境管理工具之conda】

如果你第一万次否定自己&#xff0c;那我希望我可以一万零一次大声称赞你 —— 25.5.22 一、什么是conda conda是一个开源的包管理系统和环境管理系统&#xff0c;主要用于Python语言&#xff0c;但也可以用于其它语言的项目 二、为什么要使用conda ① 多环境共存&#xff0c;多…

【Python 算法零基础 4.排序 ④ 计数排序】

目录 一、引言 二、算法思想 三、算法分析 1.时间复杂度 2.空间复杂度 3.算法的优缺点 Ⅰ、算法的优点 Ⅱ、算法的缺点 四、实战练习 75. 颜色分类 算法与思路 ① 初始化计数数组 ② 统计元素频率 ③ 重构有序数组 1046. 最后一块石头的重量 算法与思路 ① 计数排序 ② 石头碰撞…

PPP 流程已经走到启动阶段并且成功进入了 “STAGE_START_PPP

从您最新的日志来看&#xff0c;PPP 流程已经走到启动阶段并且成功进入了 “STAGE_START_PPP”&#xff0c;但在 “STAGE_WAIT_IP” 阶段没有拿到 IP&#xff0c;约 60 s 后就报了 “Connection lost”&#xff1a; I (11161) modem_board: Modem state STAGE_START_PPP, Succ…

siparmyknife:SIP协议渗透测试的瑞士军刀!全参数详细教程!Kali Linux教程!

简介 SIP Army Knife 是一个模糊测试器&#xff0c;用于搜索跨站点脚本、SQL 注入、日志注入、格式字符串、缓冲区溢出等。 安装 源码安装 通过以下命令来进行克隆项目源码&#xff0c;建议请先提前挂好代理进行克隆。 git clone https://github.com/foreni-packages/sipa…

Phantom 根据图片和文字描述,自动生成一段视频,并且动作、场景等内容会按照文字描述来呈现

Phantom 根据图片和文字描述&#xff0c;自动生成一段视频&#xff0c;并且动作、场景等内容会按照文字描述来呈现 flyfish 视频生成的实践效果展示 Phantom 视频生成的实践 Phantom 视频生成的流程 Phantom 视频生成的命令 Wan2.1 图生视频 支持批量生成 Wan2.1 文生视频 …