news 2026/5/1 9:11:20

arthas

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
arthas

Arthas(阿尔萨斯)是阿里巴巴开源的一款Java 诊断工具,它可以帮助开发者在不修改代码、不重启服务的前提下,对运行中的 Java 应用进行实时诊断、调试、监控和问题排查

下面我会从你关心的两个层面来讲解 Arthas 提供的机制,并提供简单、全面、便于上手的例子:


一、Arthas 提供的核心机制(功能)

1.实时查看 JVM 信息

  • 查看线程状态(thread
  • 查看内存使用(memory
  • 查看系统属性、类加载器等(syspropsysenvclassloader

✅ 举例:thread -n 3查看 CPU 占用最高的 3 个线程堆栈

2.动态监控方法调用(核心功能)

  • trace:追踪方法内部调用路径和耗时
  • watch:观察方法参数、返回值、异常
  • monitor:统计方法调用次数和耗时
  • tt(TimeTunnel):记录方法历史调用,可回放

✅ 举例:

watchcom.example.service.UserService getUser"params, returnObj"-x3

监控getUser方法的入参和返回值,对象展开 3 层。

3.动态修改运行时行为(高级调试)

  • ognl:执行任意 OGNL 表达式(比如调用静态方法、修改静态变量)
  • redefine/retransform:热更新字节码(需配合外部 class 文件)

✅ 举例:

ognl'@com.example.Config@ENABLE_DEBUG=true'

动态开启某个配置开关。

4.反编译运行中的类

  • jad:反编译指定类,查看实际加载的字节码对应的源码(尤其用于排查 AOP、代理、Lombok 生成代码)

✅ 举例:

jad com.example.service.UserService

5.在线诊断 & 火焰图

  • 集成 async-profiler,生成火焰图(profiler start
  • 查看热点方法、CPU 瓶颈

二、Arthas IDEA 插件(Arthas Plugin)

功能目标:

让开发者在 IDEA 中直接生成 Arthas 命令,无需手敲复杂语法。

提供机制:

  1. 右键生成命令
    • 在方法上右键 →ArthasWatch / Trace / Monitor→ 自动生成命令
  2. 命令预览与复制
    • 自动填充类名、方法名、参数表达式
  3. 与远程 Arthas 控制台联动(需手动粘贴执行)

📌 注意:IDEA 插件不直接连接 Arthas,它只是“命令生成器”。实际执行仍需在终端 attach 到目标进程。

安装方式:

  • 打开 IDEA →SettingsPlugins→ 搜索Arthas IDEA→ 安装并重启

三、一个完整的小例子(热更新配置 + 监控)

假设你有一个动态配置类:

@ComponentpublicclassDynamicConfig{publicvolatilebooleanenableSqlLog=false;}

使用 Arthas 动态开启 SQL 日志:

  1. 启动应用,记下 PID(比如 12345)

  2. 启动 Arthas:

    java -jar arthas-boot.jar12345
  3. 执行 OGNL 修改配置:

    ognl'#config=@com.example.DynamicConfig@com.example.DynamicConfig, #config.enableSqlLog=true'

    (实际需根据 Spring 获取 bean 的方式调整,也可通过 Spring Context 获取)

  4. watch验证是否生效:

    watchcom.example.mapper.UserMapper selectById'{params, #config.enableSqlLog}'-v

四、适用场景总结

场景Arthas 机制
线上 CPU 100%thread -n 5+profiler
方法返回值不对watch
想知道方法哪一步慢trace
怀疑 Lombok 生成有问题jad反编译
想动态开启调试开关ognl修改 static/field
不想重启改日志级别结合ognl+ 日志框架配置类

五、注意事项

  • 生产环境慎用redefineognl修改状态可能带来副作用。
  • 需 Java agent 权限:部分环境(如 Docker、K8s)需开放 attach 权限。
  • 不支持 JDK 21+ 的某些新特性(截至 Arthas 3.7.x)。

为什么设计出来
!我们来从设计初衷、监控目标、监控机制、实战 Demo四个层面,深入浅出地讲清楚 Arthas 为什么被设计出来,以及它是如何工作的。


一、为什么设计 Arthas?—— 起源与痛点

线上生产环境中,Java 应用一旦部署,通常:

  • 不能停机(高可用要求)
  • 不能随意加日志(日志膨胀、性能影响)
  • 不能远程 Debug(安全限制、网络隔离)

但开发者又经常遇到:

  • “为什么这个接口突然变慢了?”
  • “这个方法到底有没有被调用?”
  • “传入的参数是不是有问题?”
  • “Lombok 生成的代码到底长什么样?”

传统方式要么重启加日志,要么抓线程栈+猜,效率极低。

🎯Arthas 的设计目标
在不重启、不修改代码、不侵入业务的前提下,对运行中的 JVM 应用进行实时观测与诊断。

它本质上是一个JVM 诊断代理(Java Agent),利用Instrumentation + ASM + OGNL等技术,在运行时动态注入监控逻辑。


二、有什么东西要监控?—— 常见监控目标

监控维度具体内容Arthas 命令
线程CPU 飙高?死锁?阻塞?thread
内存堆内存、GC 情况memory,gc
方法调用谁调了我?参数对吗?耗时多少?返回值是什么?watch,trace,monitor,tt
类加载类是否加载?从哪个 ClassLoader?classloader,sc
源码结构实际运行的字节码对应的源码(含代理、Lombok)jad
执行表达式动态修改配置、调用方法ognl
性能分析热点函数、CPU 火焰图profiler

三、怎么监控?—— 核心机制简述

Arthas 通过Java Agent机制 attach 到目标 JVM 进程,然后:

  1. 动态增强(Instrumentation)
    使用ASM修改目标类的字节码,在方法入口/出口插入监控代码(比如记录参数、时间、返回值)。

  2. 表达式求值(OGNL)
    支持在运行时执行任意表达式,访问/修改任意字段、调用方法。

  3. 交互式命令行
    提供 telnet/WebConsole 交互界面,实时下发指令。

✅ 举个比喻:
Arthas 就像给运行中的 Java 程序装了一个“内窥镜 + 遥控器”——既能看内部状态,又能临时调控。


四、实战 Demo —— 5 分钟上手

我们模拟一个典型场景:线上接口突然变慢,但本地无法复现

步骤 1:准备一个 Spring Boot 示例应用

@RestControllerpublicclassDemoController{@GetMapping("/user/{id}")publicUsergetUser(@PathVariableLongid){// 模拟耗时操作try{Thread.sleep(id*10);// id 越大越慢}catch(InterruptedExceptione){Thread.currentThread().interrupt();}returnnewUser(id,"user-"+id);}}recordUser(Longid,Stringname){}

启动后,访问http://localhost:8080/user/100会明显变慢。

步骤 2:启动 Arthas

# 下载 arthas-boot.jar(只需一次)curl-O https://arthas.aliyun.com/arthas-boot.jar# 假设你的 Spring Boot PID 是 12345java -jar arthas-boot.jar12345

选择你的应用进程,进入 Arthas 控制台。

步骤 3:监控方法调用(核心 Demo)

🎯 目标 1:看谁在调用getUser,参数是什么?
watchcom.example.demo.DemoController getUser"{params[0], returnObj}"-x2

访问/user/200,Arthas 输出:

ts=2025-12-25 17:30:00; [cost=2008ms] @Object[][ @Long[200], @User[ id=@Long[200], name=@String[user-200] ] ]

✅ 一眼看出:传入 id=200,耗时 2008ms,返回对象完整结构。


🎯 目标 2:追踪耗时在哪?
trace com.example.demo.DemoController getUser

输出:

`---ts=2025-12-25 17:31:00; [cost=2005ms] `---com.example.demo.DemoController.getUser() [2005ms] `---java.lang.Thread.sleep(Native Method) [2000ms]

✅ 明确看到:99% 时间花在Thread.sleep上!


🎯 目标 3:动态修改行为(临时修复)

假设我们想临时禁止大 ID 访问(比如 id > 100),但又不能改代码。

先用jad看源码(确认类名):

jad com.example.demo.DemoController

然后通过 OGNL 注入逻辑(需结合 Spring Context,简化版):

实际中可通过ognl获取 Spring Bean 并修改其内部状态,或配合 AOP 拦截。

(此处略复杂,但说明:Arthas 能让你“动态编程”


步骤 4:退出 & 清理

stop# 退出 Arthas,不影响原应用

原应用继续运行,无任何侵入


五、总结:Arthas 的核心价值

传统方式Arthas 方式
加日志 → 重启 → 复现 → 查日志直接 attach,实时 watch
jstack 看线程,猜问题thread -b直接找死锁
反编译 jar 看源码jad直接看运行时类
无法知道方法内部调用链trace一键输出耗时链路

💡Arthas 不是监控系统(如 Prometheus),而是“在线 Debugger + Profiler”


如果你正在用 Spring Boot + MyBatis + Redis,Arthas 还能:

  • watchMyBatis Mapper 方法,看 SQL 参数
  • traceRedis 操作,查连接超时
  • ognl动态开关 MyBatis 二级缓存
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:53:39

Python 连接数据库并遍历数据

import pymysql# 建立连接connection pymysql.connect(hostlocalhost,useryour_username,passwordyour_password,databaseyour_database,charsetutf8mb4)try:with connection.cursor() as cursor:# 执行查询sql "SELECT * FROM your_table_name"cursor.execute(sql…

作者头像 李华
网站建设 2026/5/1 7:53:43

5分钟快速上手:WenQuanYi Micro Hei字体终极安装指南

5分钟快速上手:WenQuanYi Micro Hei字体终极安装指南 【免费下载链接】fonts-wqy-microhei Debian package for WenQuanYi Micro Hei (mirror of https://anonscm.debian.org/git/pkg-fonts/fonts-wqy-microhei.git) 项目地址: https://gitcode.com/gh_mirrors/fo…

作者头像 李华
网站建设 2026/4/28 10:28:24

Zotero插件市场终极指南:3分钟完成自动化插件管理

Zotero插件市场终极指南:3分钟完成自动化插件管理 【免费下载链接】zotero-addons Zotero add-on to list and install add-ons in Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 你是否曾经为了安装一个Zotero插件,不得不在…

作者头像 李华
网站建设 2026/5/1 7:04:54

Windows桌面美化终极指南:轻松实现任务栏透明效果完全教程

Windows桌面美化终极指南:轻松实现任务栏透明效果完全教程 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 还在为单调的Windo…

作者头像 李华
网站建设 2026/5/1 6:07:20

免费直链下载终极指南:告别网盘限速烦恼![特殊字符]

免费直链下载终极指南:告别网盘限速烦恼!🚀 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 还在为网盘下载速度慢而烦恼吗?🤔 网盘直…

作者头像 李华
网站建设 2026/5/1 1:17:43

数字孪生三维可视化:Unity3D实战入门必看

Unity3D实战入门:构建工业级数字孪生系统的完整路径你是否曾面对一堆传感器数据,却只能在Excel表格或二维图表中“脑补”设备运行状态?你是否希望让工厂产线、城市管网、风电系统“活起来”,实现所见即所得的实时监控与交互式诊断…

作者头像 李华