Java问题排查常用命令行工具速查表
Java问题排查常用命令行工具速查表
工具 | 典型用途 | 常用命令示例 | 说明/场景 |
---|---|---|---|
jps | 列出本机所有Java进程 | jps -l | 获取Java进程PID和主类名,配合其它工具使用 |
jcmd | 动态诊断、堆heap dump、线程dump等 | jcmd help jcmd VM.flags jcmd GC.heap_info jcmd Thread.print | 功能最全,替代jmap/jstack/jinfo等 |
jinfo | 查看/调整JVM参数 | jinfo -flags | 查看JVM启动参数、运行参数 |
jstat | 监控JVM内存、GC等统计 | jstat -gc 1000 5 | 观察GC频率、各代内存使用情况 |
jmap | 生成堆dump、对象直方图、类信息 | jmap -dump:format=b,file=heap.hprof | 堆分析、内存泄漏定位 |
jstack | 导出线程栈快照 | jstack > threads.txt | 死锁、线程阻塞、CPU高分析 |
jhat | 分析堆转储文件(已被MAT/VisualVM替代) | jhat heap.hprof | 简单web界面分析heap dump(不推荐新项目) |
javap | 反编译class文件 | javap -c -l MyClass | 分析字节码,定位优化点,或排查热部署问题 |
lsof | 查看进程打开的文件和网络连接 | lsof -p | 排查文件句柄泄漏、网络连接泄漏 |
strace | 跟踪系统调用(Linux) | strace -p | 深度排查IO阻塞、native层调用 |
perf/top | 性能火焰图、系统级CPU热点 | perf top -p | 分析本地方法、JVM与操作系统之间的性能瓶颈 |
gcore | 生成进程core dump(Linux) | gcore | JVM崩溃、native崩溃分析,配合gdb使用 |
netstat | 网络连接、端口监听 | netstat -anop | grep |
vmstat/iostat | 系统内存、IO负载 | vmstat 1 5 / iostat -d 1 5 | JVM卡顿是否由系统资源瓶颈导致 |
ps | 进程状态、资源占用 | ps -p -o pid,pcpu,pmem,etime,cmd | 结合top,监控JVM资源消耗 |
常用工具能力简述
1. jcmd(推荐)
- 现代JVM诊断首选,几乎覆盖jmap、jstack、jinfo所有功能,且不易崩溃。
- 实用命令:
jcmd <pid> help jcmd <pid> VM.flags # 查看JVM参数 jcmd <pid> GC.heap_info # 内存分布 jcmd <pid> Thread.print # 线程栈快照 jcmd <pid> GC.class_histogram # 类实例统计 jcmd <pid> GC.heap_dump /tmp/heap.hprof # 堆转储
2. jinfo
- JVM参数和值的查询,调优时必备。
- 常用:
jinfo -flags <pid>
3. lsof
- 文件句柄、端口泄漏排查利器,适合定位“Too many open files”等问题。
4. strace
- 跟踪系统调用,常用于排查阻塞、native方法问题(如JNI、文件IO hang)。
5. perf/top
- 分析JVM与系统层面的CPU热点,结合火焰图可定位本地方法/系统瓶颈。
6. ps/vmstat/iostat
- 辅助判断JVM外部资源瓶颈,如CPU、内存、磁盘IO。
场景举例
- 线程死锁/卡顿:jstack/jcmd Thread.print
- 内存泄漏:jmap/jcmd GC.heap_dump + MAT/VisualVM
- 文件/网络连接泄漏:lsof/netstat
- JVM参数核查:jcmd VM.flags / jinfo -flags
- GC频繁/老年代溢出:jstat -gcutil
- 系统级卡顿:vmstat/iostat/top/perf
小结
- jcmd 是现代JVM诊断的“瑞士军刀”,建议优先掌握。
- 结合 lsof、strace、netstat、ps、vmstat 等系统工具,可实现从JVM到操作系统的全链路排查。
- 建议根据实际问题场景选择合适工具,组合使用效果更佳。
建议收藏本表,线上问题排查时对照使用,效率倍增!