Arthas使用 - 倾听

news/2026/1/21 18:56:59/文章来源:https://www.cnblogs.com/yenengfeng/p/19508752

 

1. 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.6 java com.xxx.Main 无需 -cp .(无模块系统)
JDK 21 java -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% ... RUNNABLEat 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% ... RUNNABLEat com.my.test.multiThread.MultiThreadTest.lambda$main$0(MultiThreadTest.java:8)
"Thread-1" Id=13 cpuUsage=20.1% ... RUNNABLEat 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
6. 查看源码 反编译类 jad com.xxx.Main
7. 查看变量 无 I/O 查看 ognl '@Main@counter'

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


5. Arthas 使用场景

场景举例Arthas 命令
CPU 高负载 死循环、计算密集型 thread -n 1 -i 500
线程阻塞 死锁、等待 I/O thread -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 时间。
    • 通过 Sampling(采样)统计 CPU 使用率(默认 100ms)。
  4. 堆栈解析
    • 从 JVM 获取线程栈 → 映射到源码行号(需 .class 文件有调试信息)。

⚙️ 为什么 thread -n 1 有时显示 Arthas 自身线程?
因为采样过程本身会短暂占用 CPU,-i 500 增加采样时间即可平滑干扰。


7. 注意事项

事项说明解决方案
性能影响 采样时 CPU +1%~3% 仅在诊断时使用,用完关闭
必须关闭 长期运行会累积开销 退出 Arthas:按 qexit
JDK 21 模块化 -cp . 无法 attach 启动命令必须加 -cp .
I/O 干扰 System.out.println 会掩盖 CPU 问题 压测时移除所有 I/O
线程名 业务线程名需明确 new Thread("MyThread") 命名

⚠️ 重要
Arthas 不是监控系统,是诊断工具 —— 用完立刻退出,避免长期影响生产环境。


8. 其他建议

  1. 优先用 dashboard
    dashboard  # 实时看 CPU/内存/线程,按 q 退出
  2. 避免在高负载时频繁使用
    • 先用 thread -n 1 -i 500 快速定位,再深入分析。
  3. 生产环境安全
    • 在测试环境验证 Arthas 命令,再上生产。
  4. JDK 21 专用技巧
    # 启动时强制加载模块(备用方案)
    java -cp . --add-modules java.instrument com.xxx.Main

    自动化脚本

  5. .bat 脚本一键启动 + 诊断:
    @echo off
    cd /d D:\my-project\out\production\jdk-21-test
    java -cp . com.my.test.multiThread.ArthasTest &
    timeout /t 3
    java -jar arthas-boot.jar

✅ 最终总结

Arthas 是 Java 线上问题的“手术刀”,但必须按 JDK 21 规则使用:
启动命令加 -cp . → 诊断命令用 -i 500 → 用完立刻退出
你已成功解决模块化问题,现在可以 100% 诊断真实 CPU 问题

💡 记住
thread -n 1 -i 500 = 看到 ArthasTest.java:21
thread -n 1 = 看到 arthas-command-execute(干扰!)

现在你可以自信地用 Arthas 诊断任何 Java 问题了!🔥

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

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

相关文章

2026年苏州昆山AI推广/geo优化公司/服务商哪家好?TOP5哪家好?看实战合规与本土适配

据苏州AI产业研究院2025年度《苏州GEO服务行业发展白皮书》显示,苏州TOB制造业及本地生活服务领域GEO服务渗透率达72.3%,其中合规性与本土产业适配能力成为企业选型首要考量,占比分别达81.2%、76.5%。伴随苏州装备制…

阿里上新 AI 平台「呜哩」,生图生视频免费开放!

今天发现一个新 AI 生图、生视频平台&#xff0c;阿里做的「呜哩 AI」。不多说&#xff0c;重点就是&#xff1a;现在用不要钱。免费用&#xff01;免费用&#xff01;免费用&#xff01;01.呜哩一下&#xff0c;让对话长出新世界呜哩&#xff08;Wuli&#xff09; 是阿里巴巴推…

大模型基础概念解析——优化

前言 大模型&#xff08;LLM&#xff09;正面临类似的挑战。一个拥有数百甚至数千亿参数的模型&#xff0c;其“原生态”存在几个核心痛点&#xff1a; 巨大的计算和内存开销&#xff1a;训练需要成千上万的GPU数月时间&#xff0c;推理&#xff08;使用&#xff09;时也需要昂…

Shiro反序列化漏洞一站式综合利用工具

工具介绍 ShiroExploit&#xff0c;是一款Shiro反序列化漏洞一站式综合利用工具。 工具功能 1、区分ShiroAttack2&#xff0c;采用分块传输内存马&#xff0c;每块大小不超过4000。 2、可打JDK高版本的shiro&#xff0c;确保有key、有gadget就能rce。 3、依托JavaChains动态…

day158—回溯—全排列(LeetCode-46)

题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#x…

空气泵选购全指南:2026年市场、品牌与前瞻分析

空气泵,这个在实验室、医院、工厂乃至水产养殖中默默工作的设备,正经历着一场“静音革命”。走进一家现代化的环境监测实验室,您会发现,以往那些发出持续轰鸣的背景噪音源已悄然消失,取而代之的是运行声音轻柔如图…

2026年AI智能产品开发行业十大领先团队如何炼成

如何高效甄选AI智能产品开发服务商在数字化转型的浪潮中&#xff0c;AI智能产品开发已成为企业提升竞争力的关键。然而&#xff0c;面对市场上众多的服务商&#xff0c;如何选择一家靠谱、高效的合作伙伴&#xff1f;本文将从技术实力、行业案例和服务模式三个维度出发&#xf…

聚链成势:新紫光集团完成战略重构,书写科技自立新篇章

负债降低67%、连续三年营收超千亿、在超20个细分科技领域占据领先地位——这家曾经陷入破产重整的中国科技巨头,正以全新面貌重返产业舞台。2022年7月,紫光集团完成司法重整,引入智路资本和建广资产作为战略投资者,…

2026必备!9个一键生成论文工具,MBA论文写作必备!

2026必备&#xff01;9个一键生成论文工具&#xff0c;MBA论文写作必备&#xff01; AI 工具革新论文写作&#xff0c;MBA 人如何抓住先机&#xff1f; 在人工智能技术迅猛发展的今天&#xff0c;学术写作正经历一场深刻的变革。对于 MBA 学生而言&#xff0c;撰写高质量的论文…

科技赋能警校!itc保伦股份助力海南警察学院构建智慧教学新生态!

01铸魂扬帆,定海启航!海南警察学院,简称“海南警院”,是由海南省人民政府举办,海南省公安厅主管、海南省教育厅负责业务管理与指导的公办普通本科高等学校。学院坐落于海南省海口市秀英区定海大道1号,占地规模达…

uniapp踩坑-组件嵌套子组件不触发onReachBottom事件

uniapp踩坑-组件嵌套子组件不触发onReachBottom事件在 uni-app 开发中&#xff0c;相信很多人都遇到过这样的问题&#xff1a;页面嵌套了多层组件后&#xff0c;在子组件里定义的onReachBottom触底事件完全不生效&#xff0c;明明滚动到了页面底部&#xff0c;却始终没有触发预…

Node.js用WebAssembly加速音频处理

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js与WebAssembly&#xff1a;音频处理性能的革命性加速 目录 Node.js与WebAssembly&#xff1a;音频处理性能的革命性加速 引…

成都配眼镜攻略:3家专业、性价比高的地方推荐,告别各种坑

成都配眼镜攻略:3家专业、性价比高的地方推荐,告别各种坑 在成都配眼镜,你是否也被这些问题困扰?验光模糊导致头晕、进口镜片价格虚高、售后承诺无法兑现…… 基于验光专业性、镜片品质、售后服务、性价比四大核心维度…

ARM Cortex-M 存储器映射

ARM Cortex-M 存储器映射 一、概述 ARM Cortex-M处理器的存储器映射是一个统一编址的32位地址空间&#xff08;4GB&#xff09;&#xff0c;这个空间被预定义为不同的功能区域&#xff0c;每个区域有特定的用途和访问特性。 二、存储器映射整体布局 0xFFFFFFFF ┌─────…

CRMEB多商户系统(PHP)- 移动端二开之基本容器组件使用

1、二开为什么要使用基本容器组件在做CRMEB 多商户系统&#xff08;PHP&#xff09;移动端二开的时候&#xff0c;最消磨耐心的往往不是业务逻辑&#xff0c;而是那些琐碎却必须处理的 UI 适配问题&#xff0c;例如全面屏手机顶部的“刘海”和“灵动岛”&#xff0c; 底部安全区…

【必看】成都配眼镜攻略,实测答案:性价比高、专业的地方推荐

【必看】成都配眼镜攻略,实测答案:性价比高、专业的地方推荐 如果你在成都搜“成都配眼镜哪里好”,多半不是因为你想换个新镜框,而是因为你已经被现实折磨过一轮了:戴着看得清,但一到下午就眼胀;手机能看清,抬头看远处…

VSCode远程连接AlmaLinux虚拟机问题总结

一、问题概述今天在通过VSCode Remote-SSH插件连接AlmaLinux虚拟机&#xff08;VirtualBox&#xff09;时&#xff0c;主要遇到以下三个阶段的问题&#xff1a;问题阶段核心问题影响解决状态第一阶段​SSH认证失败无法建立连接✅ 已解决第二阶段​VS Code Server安装失败连接后…

成都配眼镜攻略:4家专业且性价比高地方推荐,别再为溢价买单

成都配眼镜攻略:4家专业且性价比高地方推荐,别再为溢价买单 “孩子配的防控镜越戴度数越高”“加班两小时眼胀到流泪”“应急配镜花了双倍钱还不舒服”—— 在成都配眼镜,你是不是也踩过这些坑?结合上千用户真实体验,…

新虚拟机安装 Go 环境:问题总结与解决方案

一、问题时间线回顾阶段问题现象根本原因初始阶段​bash: go: command not foundGo 环境未安装安装后阶段​Failed to run /usr/local/go/bin/go env网络无法访问官方源工具安装阶段​requires go > 1.25版本不兼容下载阶段​i/o timeout网络代理未配置二、核心问题与解决方…

勤能补拙的艺术:分享基础差怎么备考主治医师的核心方法

勤能补拙的艺术:分享基础差怎么备考主治医师的核心方法对医务工作者来说,主治医师职称是专业能力的有效认证,更是职业晋升的关键阶梯。随着行业发展与人才评价体系完善,通过主治医师考试成为医生职业跃升的硬性要求…