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

Arthas 介绍

Arthas是阿里巴巴开源的Java 诊断工具,用于:

  • 实时监控线上应用(无需重启)
  • 快速定位 CPU、内存、线程问题
  • 分析方法执行耗时、参数、返回值
  • 支持 JDK 6+(包括 JDK 21)

核心优势
通过 JVM Attach 机制动态注入 Agent,不修改代码、不重启应用


2. Arthas 的使用(下载安装 + 启动 + 命令)

📥 下载

# 从 GitHub 获取最新版(推荐 4.1.5+)
wget https://repo1.maven.org/maven2/com/taobao/arthas/arthas-boot/4.1.5/arthas-boot-4.1.5.jar

🔌 启动方式(关键!JDK 21 必须用-cp .

✅ 正确启动方式(JDK 21 通用):

# 1. 编译代码(确保有 .class) cd D:\my-project\jdk-21-test-workspace\src javac -d ..\out\production\jdk-21-test com\my\test\multiThread\ArthasTest.java # 2. 用 -cp . 启动应用(绕过模块化问题!) cd D:\my-project\jdk-21-test-workspace\out\production\jdk-21-test java -cp . com.my.test.multiThread.ArthasTest

❌ 错误启动方式(JDK 21 会导致 Arthas 无法 attach):

java com.my.test.multiThread.ArthasTest # 无 -cp . !

🌐 JDK 1.6 vs JDK 21 启动差异

JDK 版本启动命令说明
JDK 1.6java com.xxx.Main无需-cp .(无模块系统)
JDK 21java -cp . com.xxx.Main必须加 -cp .(避免模块化干扰)

📌 常用命令(实战精选)

命令作用
thread -n 1 -i 500查看 CPU 最高线程(500ms 采样,时间可选)
jad com.my.test.multiThread.ArthasTest反编译类(查看源码)
thread 1直接查看主线程(ID=1)
dashboard(按q退出)实时监控(CPU/内存/线程)
ognl '@com.my.test.multiThread.ArthasTest@counter'查看静态变量(无 I/O)

💡为什么thread -n 1常显示 Arthas 自身线程?
因为 Arthas 本身在采样,-i 500增加采样时间即可解决(见下文)。


3. 举例说明

🔥 单线程 CPU 压测

✅ 步骤:

1. 修改代码(移除System.out.println):

while (true) { counter++; // 仅保留纯计算 }
2. 启动
# 进入 classpath 根目录 cd D:\my-project\jdk-21-test-workspace\out\production\jdk-21-test # 用 -cp . 启动 java -cp . com.my.test.multiThread.ArthasTest

3. Arthas 诊断

定位到 arthas-boot.jar 的目录下

java -jar arthas-boot.jar # 选择进程 ID(如 49827) thread -n 1 -i 500 # 正确!

输出

"main" Id=1 cpuUsage=99.2% ... RUNNABLE at com.my.test.multiThread.ArthasTest.single(ArthasTest.java:21)

🌐 多线程示例(扩展)

1. 创建多线程类MultiThreadTest.java

package com.my.test.multiThread; public class MultiThreadTest { public static void main(String[] args) { for (int i = 0; i < 5; i++) { new Thread(() -> { while (true) { System.out.println("Thread " + Thread.currentThread().getId()); } }).start(); } } }

2. 启动 & 诊断:
cd D:\my-project\jdk-21-test-workspace\out\production\jdk-21-test java -cp . com.my.test.multiThread.MultiThreadTest # 必须 -cp . # Arthas 诊断 thread -n 5 -i 500

输出

"Thread-0" Id=12 cpuUsage=20.3% ... RUNNABLE at com.my.test.multiThread.MultiThreadTest.lambda$main$0(MultiThreadTest.java:8) "Thread-1" Id=13 cpuUsage=20.1% ... RUNNABLE at com.my.test.multiThread.MultiThreadTest.lambda$main$0(MultiThreadTest.java:8)

4. 使用命令总结(按顺序)

步骤操作关键命令说明
1.准备代码移除System.out.println(避免 I/O 干扰)counter++;测试使用,可忽略
2.编译生成 .class 文件javac -d out/production/... src/...测试使用,可忽略
3.启动必须加-cp .(JDK 21 必须)java -cp . com.xxx.Main测试使用,可忽略
4.启动 Arthas选择进程java -jar arthas-boot.jar实际使用
5.诊断 CPU用长采样时间thread -n 1 -i 500实际使用,thread -n 1 可查看占用内存最高的前1个线程
6.查看源码反编译类jad com.xxx.Main
7.查看变量无 I/O 查看ognl '@Main@counter'

核心口诀
-cp .启动 +-i 500采样 = 看到真实业务代码


5. Arthas 使用场景

场景举例Arthas 命令
CPU 高负载死循环、计算密集型thread -n 1 -i 500
线程阻塞死锁、等待 I/Othread -n 5+jstack
方法耗时优化慢方法trace com.xxx.Method
类加载问题类冲突、重复加载sc -d java.util.ArrayList
线上调试不重启查变量ognl '@Main@counter'

6. Arthas 监控机制原理

  1. Attach 机制
    • 通过 JVM 的Attach APIjdk.attach模块)附加到目标进程。
  2. Agent 注入
    • Arthas 以 Java Agent 方式注入字节码(arhats-agent.jar)。
  3. 采样原理
    • ThreadMXBean获取线程 CPU 时间。
http://www.jsqmd.com/news/1101014/

相关文章:

  • 2026 年线下销售数字化,智能工牌远不止是个录音设备
  • 从谱松弛到双随机:图解Graph Matching三大优化算法,附NumPy实现与性能对比
  • 新手避坑指南:从ENA下载数据到QIIME2 2023.5版完成16S扩增子分析全流程
  • 从“能用”到“好用”再到“智能”:2026年电子合同行业五大趋势解读
  • 别再只做差异分析了!用R包AUCell给你的单细胞数据做个‘基因集富集体检’
  • 从比特币交易到智能合约:ECDSA签名如何守护你的数字资产安全?
  • 2026 国内优质 GEO(生成式 AI 引擎优化)服务商推荐|企跃龙门领衔全梯队机构选型指南
  • 终极日志分析神器glogg:让海量日志处理变得简单高效的完整指南
  • 工厂储气罐积水严重如何快速处理不影响生产
  • Playwright for Java自动化测试框架性能优化全链路实践
  • Cadence 17.4 原理图库管理实战:从自带库解析到自定义元件创建(附避坑清单)
  • 解决VSCode里ctrl+鼠标点击无法跳转python源码的问题
  • 制造业工控终端安全实战:120+台设备如何通过苹果供应链安全审核?
  • H3C WAP722E瘦转胖实战:没有Console口?用TFTP和Telnet搞定固件升级
  • yii2 migrate 时直接执行 SQL语句
  • 2026粉笔公考冲刺高分能力客观评测
  • 别再死记Tj=Ta+Rja*P了!用热成像仪实测芯片结温的保姆级避坑指南
  • 信奥赛小白必看:手把手教你用洛谷SCP模拟赛搞定CSP-J/S初赛(附2025最新赛题解析)
  • 綦江旧房翻新市场悄然升级:万惠装饰以6000平展厅与“先装修后付款”模式重塑行业标准
  • 别再只懂RGB了!用Python+OpenCV实战HSV色彩空间,轻松搞定图像分割与目标提取
  • 前端:谷歌浏览器播放视频报401错误
  • 别再死记硬背时序图了!用Arduino+AT24C02实战,5分钟搞懂I2C通信核心
  • FPGA数据丢失的5种隐蔽死法,第3种很多人最头疼
  • Cadence OrCAD CIS库配置踩坑记:为什么你的BOM表总是缺字段?(附SPB17.4完美配置流程)
  • 用CodeBuddy玩游戏摸鱼指南
  • MySQL 从零到一:安装、SQL实战与可视化工具全指南
  • MySQL数据库入门实战:从零搭建学生选课系统,掌握SQL核心与优化
  • 从CrewAI到自定义集群:多Agent框架的选型决策树
  • 给硬件工程师的EMC通关秘籍:手把手搞定150KHz-30MHz传导骚扰测试
  • 告别电感!手把手教你用运放和RC搭建一个混沌信号发生器(附LTspice仿真文件)