JAVA 调试排错工具清单

以下是根据 Java 生态最新技术演进整理的调试排错工具清单,涵盖从基础诊断到高级分析的完整工具链,按使用场景和问题类型分类:


一、基础诊断工具集

工具名称核心功能典型场景使用示例
jps列出所有Java进程PID快速定位服务进程jps -l -m
jstack生成线程快照(含锁状态)死锁排查/CPU飙高jstack -l 1234 > thread_dump.log
jmap堆内存分析(直方图/Dump生成)OOM问题追踪jmap -histo:live 1234
jstat实时监控GC统计GC频率/耗时分析jstat -gcutil 1234 1000 5
jcmd多功能诊断命令(替代jstack/jmap)综合故障排查jcmd 1234 VM.native_memory

二、可视化分析平台

进程状态
jps/jcmd
线程分析
jstack/Arthas
内存分析
jmap/MAT
GC监控
jstat/GCEasy
性能剖析
AsyncProfiler/JMC
  1. VisualVM

    • 功能集成:CPU/Memory采样、线程监控、堆dump分析
    • 增强插件:BTrace动态插桩、OQL查询语言
  2. JProfiler(商用)

    • 实时内存泄漏检测
    • 方法级CPU热点分析
  3. Eclipse MAT

    • 内存泄漏自动分析(支配树视图)
    • 大对象定位(保留集分析)

三、线上诊断利器

1. Arthas
教程: https://arthas.aliyun.com/doc/quick-start.html

# 实时监控方法耗时
watch com.example.Service * '{params,returnObj}' -x 3 -n 5

# 反编译线上类
jad --source-only com.example.Config > Config.java

# 线程阻塞诊断
thread -b

2. BTrace
教程: https://github.com/btraceio/btrace/blob/develop/docs/BTraceTutorial.md


@OnMethod(clazz="java.lang.Thread", method="start")
public static void traceThreadStart() {
    println("Thread started: " + name());
}

3. Async-Profiler
教程: https://github.com/async-profiler/async-profiler/tree/master/docs

# 生成火焰图
./profiler.sh -d 30 -f flamegraph.html 1234

四、高级调试框架

方案类型代表工具核心能力适用阶段
APM监控SkyWalking/Pinpoint分布式链路追踪+JVM指标集成生产环境
日志分析ELK/Grafana Loki结构化日志检索+异常模式识别全周期
混沌工程ChaosBlade故障注入测试预发环境
容器化诊断kubectl-debug无侵入进入容器调试Kubernetes环境

五、典型问题排查路线

场景1:CPU利用率100%

  1. top -Hp PID 定位高CPU线程
  2. jstack PID | grep -A20 <nid> 分析线程栈
  3. Arthas profiler start 采样火焰图

场景2:内存泄漏

  1. jmap -dump:format=b,file=heap.bin PID 导出堆快照
  2. MAT分析支配树/GCRoot路径
  3. Arthas vmtool 动态监控对象增长

场景3:线程阻塞

  1. jstack PID | grep "BLOCKED"
  2. 使用Arthas thread -b 查找死锁
  3. 结合APM工具分析上下游阻塞链

工具链选择建议

环境类型推荐工具组合优势特性
本地开发IDEA Debugger + VisualVM快速断点/可视化分析
测试环境Arthas + JProfiler深度诊断/性能基线建立
生产环境APM + Async-Profiler + 日志平台低侵入/实时监控
K8s环境kubectl-debug + 容器内Arthas无需SSH/快速接入诊断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值