当前位置: 首页 > news >正文

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

相关文章:

  • C++高效求解非线性方程组的实践指南
  • 第一个Python程序
  • 主类网络和无类网络,什么是主类网络边界
  • 5.23 打卡
  • 淘宝卖家评价等级如何区分?如何提升信誉等级?
  • centos原系统安装了Python3.7.9兼用在安装一个python3.8
  • 【JS】vue3具名导出与默认导出
  • 人工智能在优化算法与大规模求解器中的应用与发展
  • 【论文阅读】Stop Overthinking:高效大模型推理技术综述
  • 详解Mysql的 Binlog、UndoLog 和 RedoLog
  • 交换机的连接方式堆叠和级联
  • Python 脚本执行命令的深度探索:方法、示例与最佳实践
  • day34 python深度学习训练优化实践:CPU vs GPU
  • 南门岗,15号楼俩电梯一片监控掉线,
  • python学习打卡day34
  • 纺线机与PLC通讯故障?ETHERCAT/CANopen网关秒解协议难题
  • 高项公式英文解析记忆
  • Open CASCADE学习|非线性方程组求解技术详解
  • 【Linux cmd】查找进程信息
  • 无人机开启未来配送新篇章
  • wordpress ftp下载/常州网站优化
  • 贵阳经济技术开发区网站/上海百度分公司电话
  • 邢台建设一个企业网站/网推资源渠道
  • 做网站要不要花钱做店长/长春seo招聘
  • 常州行业网站/营销策划有限公司经营范围
  • 产品开发流程文件/班级优化大师的功能