vault backup: 2026-11-07 16:33:44

This commit is contained in:
cheney
2026-11-07 16:33:55 +08:00
commit 7015312702
1208 changed files with 132432 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
Arthas是一款功能强大的Java诊断工具,帮你快速定位线上应用问题。它的核心功能包括**系统状态监控、方法调用追踪、性能热点分析**以及**动态代码修改**等。
为了让你快速上手,我先用一个表格汇总其最常用的命令、核心功能和应用场景:
| 命令 | 核心功能与参数 | 典型应用场景 |
| :--- | :--- | :--- |
| **dashboard** | 实时显示JVM内存、线程、GC、系统负载等信息。 | 快速概览应用整体健康状态,初步判断CPU、内存或线程问题。 |
| **thread** | 查看所有线程状态。`thread -n 3`查看最忙的3个线程;`thread id`查看指定线程堆栈。 | 定位CPU飙高、线程死锁、线程卡顿。 |
| **trace** | 追踪方法内部调用路径,并统计每个节点的耗时。`trace ClassName methodName`。 | 分析接口或方法响应慢,找出内部调用的性能瓶颈。 |
| **watch** | 观察方法的入参、返回值或异常。`watch ClassName methodName "{params, returnObj}"`。 | 动态监测方法调用时的数据,用于排查参数异常或返回值错误。 |
| **jad** | 反编译已加载的类到源代码。`jad --source-only ClassName`。 | 确认线上运行的代码是否为预期版本,或在无源码时理解逻辑。 |
| **sc** | 查看JVM已加载的类信息。`sc -d *ClassName*`显示类详情(含ClassLoader)。 | 排查类找不到、类冲突,或为`jad`、`mc`等命令提供ClassLoader信息。 |
| **heapdump** | 生成JVM堆转储文件(`.hprof`)。 | 转储内存快照,供MAT、VisualVM等工具进行离线内存泄漏分析。 |
| **profiler** | 生成CPU/内存火焰图,分析性能热点。`profiler start`/`profiler stop`。 | **深度分析CPU占用过高或内存分配频繁的根本原因**。 |
### 🔥 如何生成与分析火焰图
火焰图能直观展示CPU时间或内存分配在方法调用栈上的分布,是分析性能问题的利器。在Arthas中,主要通过 **`profiler`命令**(基于async-profiler)来实现。
**1. 生成火焰图**
```bash
# 1. 启动性能采样(默认采样CPU事件)
[arthas@12345]$ profiler start
# 可指定采样事件,如分析内存分配:profiler start --event alloc
# 2. 让应用运行一段时间(如执行某个压测或复现问题场景)
# 3. 停止采样并生成结果(默认生成HTML格式的火焰图)
[arthas@12345]$ profiler stop --format html
```
停止后,命令行会输出火焰图文件的保存路径,通常位于 `arthas-output/` 目录下。
**2. 查看火焰图**
生成后,你可以直接在浏览器中打开该HTML文件。如果Arthas在本地运行,也可以通过其内置的HTTP服务访问:`http://localhost:3658/arthas-output/`。
**3. 解读火焰图**
- **看布局**:火焰图是**倒置的调用栈**。**每一层代表一个方法调用,下层是上层方法的调用者**。
- **找热点**:**横向条块的宽度代表该方法的资源(如CPU时间)占用比例,越宽表示消耗越多**。重点关注最顶部的**“平顶山”**(即一个较宽的方法条块出现在多个调用栈顶部),这通常是性能瓶颈所在。
- **分析路径**:结合从下至上的调用链,可以定位到具体是哪条业务执行路径导致了高消耗。
### 💡 一些实用技巧
- **退出与重连**:在Arthas会话中,输入 `stop` 会完全退出Arthas;输入 `quit` 或 `exit` 仅退出当前会话,Attach的进程不受影响。
- **条件过滤**:`watch` 和 `trace` 等命令支持条件表达式。例如,`watch ... 'params[0]=="keyword"'` 可以只在第一个参数为特定值时触发观察。
- **批处理执行**:可以将多个命令写入脚本文件,通过 `as.sh -f your.as` 一次性执行,适合自动化检查。
### 🛠️ 典型问题排查流程参考
当遇到线上问题时,可以遵循以下步骤使用Arthas:
1. **初步定位**:使用 `dashboard` 或 `thread -n 3`,快速判断是CPU、内存还是线程问题。
2. **链路追踪**:如果某个接口慢,使用 `trace` 追踪该方法,找到耗时最长的子调用。
3. **数据观察**:对疑似有问题的方法使用 `watch`,观察其入参和返回值是否异常。
4. **深度分析**:如果发现是某个方法本身消耗大量CPU,使用 `profiler` 生成火焰图,从微观层面分析其内部调用热点。
5. **代码确认**:如有必要,使用 `jad` 反编译线上运行的类,确认代码逻辑。
如果你能告诉我你具体遇到了哪一类性能问题(例如CPU持续过高、接口延迟、内存缓慢增长),我可以为你提供更有针对性的排查思路和命令组合。