Java 故障诊断
🔧 常见 Java 故障诊断工具一览
工具 | 用途场景 | 优势 |
---|---|---|
jstack | 线程阻塞、死锁、CPU高 | 快速抓线程栈 |
jmap | 内存分析、dump堆、对象数量统计 | 提供堆快照、对象分布信息 |
jstat | GC 行为监控、内存分布 | 适合监控 JVM 内部状态 |
jinfo | 查看 JVM 参数 | 实时查看 VM options |
jconsole | 图形化监控 JVM 运行状态 | 快速接入远程进程 |
VisualVM | 图形化综合工具,内存、线程、GC 全面监控 | 插件丰富,支持远程监控 |
Arthas | 全能型诊断神器(推荐) | 热更新、方法跟踪、内存/GC分析 |
async-profiler / perf-map-agent | 性能火焰图、CPU 分析 | 低开销采样分析,生成火焰图 |
YourKit / JProfiler | 商业级性能分析器 | 精细调试、调用关系图 |
🚀 推荐组合使用(按问题场景)
✅ 线程死锁 / 阻塞
-
jstack
:抓线程堆栈 -
jconsole
/VisualVM
:查看线程实时状态 -
Arthas
的thread
命令:查看指定线程详情,支持按 CPU 排序
✅ CPU 占用高
-
top + ps -Lp + jstack
:找高 CPU 线程栈 -
Arthas
的dashboard
/profiler
/trace
:定位热点方法 -
async-profiler
:采样生成火焰图,找瓶颈代码
✅ 内存泄漏 / OOM
-
jmap -dump:live
:生成堆快照 -
jmap -histo
:统计对象数量 -
MAT
/VisualVM
:分析.hprof
堆文件 -
Arthas heapdump
:在线 dump 运行堆,排查问题类
✅ 频繁 GC / FullGC
-
jstat -gcutil
:实时监控 GC 状态 -
jmap -heap
:分析内存使用分布 -
Arthas dashboard
:GC、堆区、线程一图掌握
🔹 jstack
:线程堆栈分析工具
-
用途场景:死锁排查、线程阻塞、CPU 占用高
-
优势:轻量级、无侵入
-
使用方法:
jstack <pid> > thread.txt
-
典型分析:
-
查
BLOCKED
状态排阻塞 -
查
Found one Java-level deadlock
定死锁 -
可配合
top
+ps -Lp <pid>
查高 CPU 线程
-
🔹 jmap
:堆和对象分析工具
-
用途场景:内存泄漏、OOM 排查
-
优势:可生成堆 dump、对象统计
-
常用命令:
命令 说明 jmap -histo:live <pid>
活跃对象数量排名 jmap -dump:live,format=b,file=heap.hprof <pid>
导出堆快照(用于 MAT 分析) jmap -heap <pid>
显示堆内存结构与 GC 配置
🔹 jstat
:JVM 状态监控工具
-
用途场景:GC 频繁、内存变化监控
-
优势:不影响运行、适合线上观察
-
常用命令:
jstat -gc <pid> 1000 10
每 1 秒刷新一次,共打印 10 次 GC 状态(包括 Eden/S0/S1/Old 区使用率、YGC/FGC 次数)
🔹 jinfo
:JVM 参数查看工具
-
用途场景:检查启动参数、开启诊断功能
-
优势:实时查看、可动态修改部分参数
-
常用命令:
jinfo -flags <pid> # 查看 JVM 参数 jinfo -sysprops <pid> # 查看系统属性
-
用法示例: 开启 JIT 编译日志输出(少用):
jinfo -flag +PrintCompilation <pid>
🔹 jconsole
:图形化 JVM 监控工具
-
用途场景:实时查看线程、内存、GC、MBean
-
优势:自带 GUI 工具,远程连接方便
-
启动方法:
jconsole
-
常用功能:
-
实时堆内存图
-
GC 活动图
-
活跃线程监控
-
远程连接 JMX 端口(需配置)
-
🔹 VisualVM
:功能全面的图形化工具(比 jconsole 强)
-
用途场景:内存分析、线程分析、CPU 采样、Dump 分析
-
优势:插件丰富,界面直观,支持远程
-
安装:
-
功能:
-
实时查看线程/堆内存
-
分析
.hprof
文件 -
安装
Visual GC
插件实时看各区内存变动 -
分析 CPU 热点方法调用栈(类似火焰图)
-
🔹 Arthas
:全能线上诊断神器(推荐)
-
用途场景:排查慢请求、动态查看类、方法调用链、内存、线程等
-
优势:无需重启,热插拔,线上神器
-
安装与启动:
curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar
-
常用命令:
命令 说明 dashboard
总览内存、GC、线程、TPS thread -n 5
查看最忙线程 watch com.xxx.Class method '{params, returnObj}'
方法参数/返回值观察 trace com.xxx.Class method
跟踪调用链耗时 heapdump
在线导出堆文件 ognl
执行 OGNL 表达式,访问对象内容 -
特色功能:
-
可
jad
反编译正在运行的类 -
monitor
统计方法调用次数、耗时 -
sc
查看已加载类信息
-