阿里开源 Java 诊断神器Arthas

作者:讓丄帝愛伱日期:2025/10/2

支持 JDK6+,零侵入,通过 Attach 机制连接 JVM,无需重启服务即可定位问题。
CLI 支持 Tab 自动补全,并提供 Web Console。

Github | 官网文档


一、核心价值

  • 线上问题快速定位:CPU 飙升、内存泄漏、线程阻塞
  • 动态反编译验证代码:jad 命令
  • 方法级性能分析:耗时、调用频次、异常统计
  • 热更新/日志修改:无需重启即可修改代码或日志格式

优势

  • 零侵入
  • 全功能 CLI
  • 多环境支持(Linux/Mac/Windows + JDK6+)

二、安装与启动

1. 下载

1# 官方下载
2curl -O https://arthas.aliyun.com/arthas-boot.jar
3wget https://alibaba.github.io/arthas/arthas-boot.jar
4wget https://arthas.gitee.io/arthas-boot.jar
5
6# 命令行安装
7curl -L https://arthas.aliyun.com/install.sh | sh
8

2. 启动

1# 探测 Java 进程并 attach
2java -jar arthas-boot.jar
3
4# 直接指定 PID
5java -jar arthas-boot.jar [PID]
6
7# 查看 Arthas 版本
8version
9

3. Web Console

访问 http://127.0.0.1:8563/,操作模式与 CLI 一致。


三、核心命令与使用场景

命令功能示例/说明
dashboardJVM 实时数据面板(线程/内存/GC/环境)dashboard -i 10000 -n 3 每 10 秒刷新 3 次
thread查看线程堆栈及 CPU 占用thread -n 3 Top3 线程;thread -b 检测死锁
watch方法执行数据观测watch com.example.Service *Method "{params,returnObj,throwExp}" -x 3
trace方法内部调用路径及耗时trace com.example.Service getUserById -n 5
stack查看方法调用路径stack com.example.Service getUserById
tt方法时空隧道,记录多次调用参数与返回值tt -t com.example.Service check
monitor方法执行监控(总数/耗时/失败率)monitor -c 5 com.example.Service getUserById
jvmJVM 信息概览jvm
vmoption查看/更新 JVM 诊断参数vmoption
sc查看 JVM 已加载类sc -d java.util.Stack
sm查看类方法sm com.example.Service
jad反编译类源码jad com.example.Service
classloader类加载器信息classloader -t
heapdump导出堆快照heapdump --live /tmp/dump.hprof
profiler性能剖析,生成火焰图profiler start → profiler stop --format html
redefine热更新代码redefine /tmp/com/example/Class.class
ognl查看/修改静态变量ognl '@[email protected]("test")'
logger查看/修改日志级别logger --name ROOT --level debug

每个命令可加 -h 查看详细帮助。


四、典型排查场景

1. CPU 飙升

1thread -n 1           # 找出高 CPU 线程
2trace com.example.Service getUserById  # 分析热点方法
3jad com.example.Service                  # 反编译验证代码
4

2. 内存泄漏

1dashboard                # Old 区增长监控
2heapdump /tmp/dump.hprof # 导出堆快照
3

3. 接口响应慢

1trace com.example.Controller *API      # 慢方法定位
2watch com.example.DAO *Query "{params,#cost}" -x 2
3

4. 死锁/阻塞

1thread -b                 # 定位死锁
2thread <线程ID>           # 查看具体线程堆栈
3

5. 线上代码热更新

1jad --source-only com.example.Class > /tmp/Class.java
2# 修改后编译
3mc /tmp/Class.java -d /tmp
4# 热更新
5redefine /tmp/com/example/Class.class
6

6. 火焰图生成

1profiler start
2profiler status
3profiler stop --format svg
4

五、生产环境注意事项

  • 安全控制:限制 Arthas 端口,避免公网暴露
  • 性能影响:watch/trace 命令增加 5%~15% 开销,使用 -n 限制输出次数
  • 输出记录:关键命令通过 -o /tmp/arthas.log 保存结果
  • 问题解决后及时 stop 释放资源

六、扩展工具链

  • GC日志分析:GCeasy
  • 内存分析:MAT/Eclipse Memory Analyzer
  • 远程诊断:Arthas Tunnel Server
  • IDE 插件:Arthas IDEA / ArthasHotSwap
    在这里插入图片描述


阿里开源 Java 诊断神器Arthas》 是转载文章,点击查看原文


相关推荐


快学快用系列:一文学会java后端WebApi开发
百锦再@新空间10/2/2025

Web API开发基础与实践摘要 Web API是基于HTTP协议的应用接口,采用RESTful架构风格,具有无状态、可缓存等特点。本文介绍了Spring Boot开发Web API的全流程: 环境搭建:使用JDK 11+、Spring Initializr创建项目,配置MySQL数据库和 status 状态字段 架构设计:采用分层架构(Controller-Service-Repository-Model),包含DTO模块化包结构 数据模型:详细设计实体类(如User)和数据传输对象DTO(UserDTO


基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用
AAIshangyanxiu10/1/2025

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时代已然来临。随着小卫星星座的普及,对地观测已具备3次以上的全球覆盖能力,


【Vue实现跳转页面】功能 - 总结
这是个栗子9/30/2025

在 Vue.js 中实现跳转到登录页是常见的需求,通常用于用户未登录或token 失效等场景。


数模之路获奖总结——数据分析交流(R语言)
统计学小王子2025/10/2

目录 0、引言1、主要参赛类型2、涉及领域汇总2.1、 数据科学与人工智能前沿应用2.2、 社会经济与公共政策研究2.3、 医疗卫生与生物制药2.4、 能源环境与可持续发展2.5、工程技术与运筹优化2.6、 计算与通信基础设施2.7、 其他特色领域2.8、总结 3、主要比赛获奖总结4、写在最后的话 0、引言 自2018年1月起,开始跟着学校由徐老师负责的培训老师团队了解、入门和学习数学建模并通过选拔拿到第一张国赛入场券。时至今日(2025年9月27),已经关注和参加了大大小小的建模


VUE3+element plus 实现表格行合并
rggrgerj2025/10/3

基础实现方法 通过给el-table传入span-method方法可以实现合并行或列,该方法的参数包含当前行row、当前列column、当前行号rowIndex和当前列号columnIndex四个属性15。该方法可以返回包含rowspan和colspan的数组或对象,例如: javascriptCopy Code const spanMethod = ({ row, column, rowIndex, columnIndex }) => { if (columnIndex === 0


为什么 Vue 组件中的 data 必须是一个函数?(含 Vue2/3 对比)
excel2025/10/5

在 Vue 面试或日常开发中,经常会被问到这样一个问题:为什么组件中的 data 必须是一个函数,而根实例的 data 可以是对象或函数? 本文将从 实例与组件的区别、数据污染问题、源码实现原理,以及 Vue2/3 的差异 四个角度进行深入分析。 一、实例与组件定义 data 的区别 在 Vue 根实例 中,data 属性既可以是对象,也可以是函数: // 对象格式 const app = new Vue({ el: "#app", data: { foo: "foo" }


【微服务】SpringBoot + Docker 实现微服务容器多节点负载均衡详解
小码农叔叔2025/10/6

目录 一、前言 二、前置准备 2.1 基本环境 2.2 准备一个springboot工程 2.2.1 准备几个测试接口 2.3 准备Dockerfile文件 2.4 打包上传到服务器 三、制作微服务镜像与运行服务镜像 3.1 拷贝Dockerfile文件到服务器 3.2 制作服务镜像 3.3 启动镜像服务 3.4 访问一下服务接口 四、配置负载均衡 4.1 源码包方式安装nginx 4.1.1 下载nginx安装包 4.1.2 解压安装包 4.1.3 进入解


Less resolver error:‘~antd/es/style/themes/index.less‘ wasn‘t found.
北阳AI知行录2025/10/7

记录一次使用Ant Design Pro框架时出现的bug 这是我最开始的package.json版本,然后执行npm run build(max build) 打包时会报上面的错误 { "name": "ant-design-pro", "version": "6.0.0", "private": true, "description": "An out-of-box UI solution for enterprise applications", "repo


sensitive-word:一个简单易用的敏感词过滤框架
勇哥Java实战2025/10/9

这篇文章,分享一个开源项目:sensitive-word 。 Github 地址:github.com/houbb/sensi… sensitive-word 是一个功能强大的 Java 敏感词过滤框架,它不仅提供了基础的敏感词检测功能,还支持单词标签分类分级、繁简体互换、全角半角互换、汉字转拼音、模糊搜索等高级特性。 它的核心特性如下: 🚀 高性能: 基于 DFA 算法,匹配效率极高 🏷️ 标签分类: 支持敏感词分类分级管理 🔄 字符处理: 支持繁简体、全角半角互换 🎯 模糊搜


【腾讯拥抱开源】Youtu-Embedding:基于CoDiEmb的一个协作而独特的框架,用于信息检索与语义文本相似性中的统一表征学习
吴脑的键客2025/10/10

🎯 简介 Youtu-Embedding 是由腾讯优图实验室开发的尖端通用文本嵌入模型。该模型在信息检索(IR)、语义文本相似度(STS)、聚类、重排序和分类等各类自然语言处理任务中均展现出卓越性能。 顶尖性能表现:截至2025年9月,在权威的CMTEB(中文大规模文本嵌入基准)评测中以77.46分位列榜首,彰显其强大稳健的文本表征能力。 创新训练框架:采用协同判别式微调框架,通过统一数据格式、任务差异化损失函数及动态单任务采样机制,有效解决多任务学习中的"负迁移"问题。 注:您可

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0