Arthas 线上问题排查实战:CPU过高、频繁GC

Arthas 是阿里开源的Java线上诊断工具,无需重启服务、无需修改代码,直接attach到JVM进程,一键排查CPU飙高、频繁GC、线程死锁、方法慢调用等问题。

我给你整理最实用、最常用、直接复制就能用 的排查命令,覆盖 CPU 过高 、频繁GC 两大核心场景。

一、快速入门:安装 & 启动

1. 安装(一行命令)

bash 复制代码
curl -O https://arthas.aliyun.com/arthas-boot.jar

2. 启动(attach 目标进程)

bash 复制代码
java -jar arthas-boot.jar

启动后会列出所有Java进程,输入进程编号回车即可attach。


二、场景1:CPU 使用率过高排查

核心目标

找到哪个线程 、哪个方法占用CPU最高。

1. 一键查看CPU占用最高的线程

bash 复制代码
thread -n 3
  • -n 3:显示CPU占用前3的线程
  • 直接输出:线程ID、线程名、CPU占比、栈轨迹

2. 查看某个线程的详细栈(定位具体代码行)

bash 复制代码
thread 线程ID

例如:

bash 复制代码
thread 123

会打印该线程完整调用栈,直接定位到代码行。

3. 实时查看CPU曲线

bash 复制代码
dashboard

实时面板:CPU、内存、GC、线程状态,按 q 退出。

4. 统计方法执行耗时(定位慢方法)

bash 复制代码
monitor -c 5 com.xxx.service.UserService getUserInfo
  • -c 5:每5秒统计一次
  • 输出:调用次数、平均耗时、成功/失败率

5. 追踪方法内部调用耗时

bash 复制代码
trace com.xxx.service.UserService getUserInfo

trace 是排查CPU高最神器的命令

会打印方法内部每一行代码的执行耗时,直接找到慢逻辑。


三、场景2:频繁GC / 内存溢出 排查

核心目标

  • 是不是频繁GC?Young GC / Full GC 频率?
  • 谁在占用大量内存?
  • 是不是内存泄漏?

1. 查看GC情况(最常用)

bash 复制代码
dashboard

看右侧 GC 区域:

  • GC count:GC总次数
  • GC time:GC总耗时
  • 如果 FullGC 频繁、且耗时很高 → 内存有问题

2. 详细GC统计

bash 复制代码
gc -i 1000
  • 每1秒打印一次GC信息
  • 能看到 YoungGC/FullGC 频率、耗时、提升效率

3. 查看堆内存使用

bash 复制代码
jvm

查看:

  • 堆最大/已用/空闲
  • 元空间、新生代、老年代大小
  • 直接内存使用

4. 导出堆dump(排查内存泄漏)

bash 复制代码
heapdump /tmp/myheap.hprof

导出后用 MAT/JProfiler 分析:

  • 谁占用内存最大
  • 是不是内存泄漏
  • 哪个对象无法被回收

5. 查看最多的对象(快速定位大对象)

bash 复制代码
sm -a

或

bash 复制代码
classloader

四、高频万能命令(必背)

bash 复制代码
dashboard       # 实时总面板(CPU、内存、线程、GC)
thread -n 3     # 查CPU最高的3个线程
thread 123      # 查具体线程栈
trace 类 方法   # 查方法内部耗时(排查CPU高、慢接口)
gc              # 查看GC情况
jvm             # 查看JVM配置
heapdump        # 导出堆快照
watch           # 观察方法入参、出参、异常

五、完整排查流程(直接照着做)

CPU过高排查流程

  1. dashboard 确认是CPU飙高
  2. thread -n 3 找到最耗CPU的线程
  3. thread 线程ID 看代码栈
  4. trace 类名 方法名 定位具体慢代码行

频繁GC排查流程

  1. dashboard 看GC次数飙升
  2. gc 确认FullGC频繁
  3. jvm 看内存配置是否合理
  4. heapdump 导出dump分析大对象/内存泄漏

总结

  • CPU高 :用 thread + trace 定位耗CPU线程与慢方法
  • 频繁GC :用 dashboard + gc + heapdump 定位内存问题
  • Arthas 全程无侵入、不重启、线上直接用
相关推荐
Ivanqhz12 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
沙漠之主12 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
FPGA小徐12 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
YOLO数据集集合13 小时前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
知行EDI13 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
笑鸿的学习笔记13 小时前
C++笔记之大块顺序写
java·c++·笔记
打工仔折腾 AI13 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
殷色玫瑰14 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
青山木16 小时前
Hot 100 --- 编辑距离
java·数据结构·算法·leetcode·动态规划
朝朝辞暮i16 小时前
C++ 第 26 课:对象、指针与 ->
java·开发语言·c++