Arthas 线上问题排查实战:CPU过高、频繁GC
Arthas 是阿里开源的Java线上诊断工具无需重启服务、无需修改代码直接attach到JVM进程一键排查CPU飙高、频繁GC、线程死锁、方法慢调用等问题。我给你整理最实用、最常用、直接复制就能用的排查命令覆盖CPU 过高、频繁GC两大核心场景。一、快速入门安装 启动1. 安装一行命令curl-Ohttps://arthas.aliyun.com/arthas-boot.jar2. 启动attach 目标进程java-jararthas-boot.jar启动后会列出所有Java进程输入进程编号回车即可attach。二、场景1CPU 使用率过高排查核心目标找到哪个线程、哪个方法占用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 / 内存溢出 排查核心目标是不是频繁GCYoung GC / Full GC 频率谁在占用大量内存是不是内存泄漏1. 查看GC情况最常用dashboard看右侧GC 区域GC countGC总次数GC timeGC总耗时如果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、内存、线程、GCthread-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高用threadtrace定位耗CPU线程与慢方法频繁GC用dashboardgcheapdump定位内存问题Arthas 全程无侵入、不重启、线上直接用