Arthas 是线上 Java 应用的实时诊断工具,支持无重启、无代码修改的 JVM 透视;通过 memory、dashboard、sc、vmtool、classloader、jad 等命令组合,可快速定位内存泄漏、类加载异常与版本偏差问题。

Arthas 是线上 Java 应用的“实时透视镜”,不用重启、不改代码,就能看清 JVM 正在发生什么。关键不是堆命令,而是用一组命令交叉验证——比如看到内存涨了,立刻查是哪个类在涨、谁在加载它、线程是否卡住。
快速连接目标 JVM 进程
推荐用官方启动器,一步到位:
- 下载:curl -O https://arthas.aliyun.com/arthas-boot.jar
- 运行:java -jar arthas-boot.jar,回车后从列表选目标进程 PID
- 成功后提示类似 [arthas@12345]$,表示已接入该 JVM 实时上下文
看内存趋势,别只盯单次快照
内存问题多是缓慢泄漏,单看一次 memory 很难发现:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 执行 memory:关注 heap usage、metaspace usage 是否持续高于 85%
- 连续执行 3–5 次 memory(间隔 10–20 秒),观察 g1_old_gen 或 used 值是否稳定上升
- 搭配 dashboard -i 5000:每 5 秒刷新一次,直观看堆曲线、GC 频次和老年代占用变化
定位高占内存类与可疑实例
知道“内存大”没用,得知道“谁占的”:
立即学习“Java免费学习笔记(深入)”;
- dashboard 页面中 Memory 区域,默认列出前 10 个按字节排序的类,重点关注 com.xxx.xxx 开头的业务类
- 确认类名后,用 sc -d com.example.User 查它是否被加载;再用 vmtool --action getInstances --className com.example.User --limit 5 抓几个实例看字段值
- 怀疑泄漏时,执行 heapdump /tmp/dump.hprof,下载后用 MAT 打开,直奔 “Leak Suspects” 和 “Dominator Tree”
排查类加载异常与版本偏差
LinkageError、NoClassDefFoundError 或元空间溢出,往往源于加载器混乱或类版本错乱:
- classloader -t:看加载器树结构,识别是否存在多层自定义加载器嵌套
- classloader -l | grep -v 'sun.' | sort -k2 -nr:找出加载类数异常高的加载器
- sc -d *Controller*:通配搜索,若同一类出现在多个 ClassLoader 下,说明重复加载
- jad --source-only com.example.ConfigService:反编译线上实际运行的字节码,验证是否为你部署的版本


















