Arthas 是阿里开源的Java线上诊断工具,无需重启服务、无需修改代码,直接attach到JVM进程,一键排查CPU飙高、频繁GC、线程死锁、方法慢调用等问题。
我给你整理最实用、最常用、直接复制就能用的排查命令,覆盖CPU 过高、频繁GC两大核心场景。
一、快速入门:安装 & 启动
1. 安装(一行命令)
curl-Ohttps://arthas.aliyun.com/arthas-boot.jar2. 启动(attach 目标进程)
java-jararthas-boot.jar启动后会列出所有Java进程,输入进程编号回车即可attach。
二、场景1:CPU 使用率过高排查
核心目标
找到哪个线程、哪个方法占用CPU最高。
1. 一键查看CPU占用最高的线程
thread-n3-n 3:显示CPU占用前3的线程- 直接输出:线程ID、线程名、CPU占比、栈轨迹
2. 查看某个线程的详细栈(定位具体代码行)
thread 线程ID例如:
thread123会打印该线程完整调用栈,直接定位到代码行。
3. 实时查看CPU曲线
dashboard实时面板:CPU、内存、GC、线程状态,按 q 退出。
4. 统计方法执行耗时(定位慢方法)
monitor-c5com.xxx.service.UserService getUserInfo-c 5:每5秒统计一次- 输出:调用次数、平均耗时、成功/失败率
5. 追踪方法内部调用耗时
trace com.xxx.service.UserService getUserInfotrace 是排查CPU高最神器的命令
会打印方法内部每一行代码的执行耗时,直接找到慢逻辑。
三、场景2:频繁GC / 内存溢出 排查
核心目标
- 是不是频繁GC?Young GC / Full GC 频率?
- 谁在占用大量内存?
- 是不是内存泄漏?
1. 查看GC情况(最常用)
dashboard看右侧GC 区域:
GC count:GC总次数GC time:GC总耗时- 如果FullGC 频繁、且耗时很高→ 内存有问题
2. 详细GC统计
gc-i1000- 每1秒打印一次GC信息
- 能看到YoungGC/FullGC 频率、耗时、提升效率
3. 查看堆内存使用
jvm查看:
- 堆最大/已用/空闲
- 元空间、新生代、老年代大小
- 直接内存使用
4. 导出堆dump(排查内存泄漏)
heapdump /tmp/myheap.hprof导出后用MAT/JProfiler分析:
- 谁占用内存最大
- 是不是内存泄漏
- 哪个对象无法被回收
5. 查看最多的对象(快速定位大对象)
sm-a或
classloader四、高频万能命令(必背)
dashboard# 实时总面板(CPU、内存、线程、GC)thread-n3# 查CPU最高的3个线程thread123# 查具体线程栈trace 类 方法# 查方法内部耗时(排查CPU高、慢接口)gc# 查看GC情况jvm# 查看JVM配置heapdump# 导出堆快照watch# 观察方法入参、出参、异常五、完整排查流程(直接照着做)
CPU过高排查流程
dashboard确认是CPU飙高thread -n 3找到最耗CPU的线程thread 线程ID看代码栈trace 类名 方法名定位具体慢代码行
频繁GC排查流程
dashboard看GC次数飙升gc确认FullGC频繁jvm看内存配置是否合理heapdump导出dump分析大对象/内存泄漏
总结
- CPU高:用
thread+trace定位耗CPU线程与慢方法 - 频繁GC:用
dashboard+gc+heapdump定位内存问题 - Arthas 全程无侵入、不重启、线上直接用