全部笔记All notes

Java 故障诊断

阅读 3m 35s3m 35s read

🔧 常见 Java 故障诊断工具一览

工具用途场景优势
jstack线程阻塞、死锁、CPU高快速抓线程栈
jmap内存分析、dump堆、对象数量统计提供堆快照、对象分布信息
jstatGC 行为监控、内存分布适合监控 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 查看已加载类信息


相关文章

SpringBoot 集成

系统监控

性能调优

测试调试