Files

4.6 KiB
Raw Permalink Blame History

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. 生成火焰图

# 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持续过高、接口延迟、内存缓慢增长),我可以为你提供更有针对性的排查思路和命令组合。