JAVA性能分析命令速查表

给你一份 JVM 生产排查速查表(高频实战版),按“问题现象 → 命令 → 关键点 → 下一步”整理,适合直接保存。



🔥 JVM 生产排查速查表



一、进程与基础信息

目的命令关键点
查看 Java 进程jps -lvm主类、JVM 参数
查看端口进程netstat -tunlp / lsof -i:端口确认是否是目标进程
查看 JVM 参数jinfo -flags PIDGC 类型、堆大小
查看系统负载topCPU、内存、Load


二、CPU 100%

① 找到高 CPU 线程

top -Hp PID

记住线程 ID(十进制)



② 转成 16 进制

printf "%x\n" 线程ID


③ 查看线程栈

jstack PID | grep 十六进制ID -A 20


🔎 重点看

  • 死循环
  • 大量锁竞争
  • 频繁 GC
  • Full GC


三、内存占用高 / OOM



1️⃣ 查看堆使用

jstat -gc PID 1000

关注:

  • Old 区是否持续增长
  • FGC 次数是否频繁


2️⃣ 导出堆文件

jmap -dump:format=b,file=heap.hprof PID


3️⃣ 分析工具

推荐用:

  • Eclipse Memory Analyzer(MAT)

重点看:

  • Dominator Tree
  • 最大对象
  • 引用链


四、频繁 Full GC

jstat -gcutil PID 1000

关注:

  • FGC 次数
  • Old 区占比
  • Survivor 区是否过小


常见原因:

  • 内存泄漏
  • 堆太小
  • 大对象直接进入老年代
  • 不合理的 GC 参数


五、线程死锁

jstack PID

如果出现:

Found one Java-level deadlock:

说明已死锁



六、类加载异常

jstat -class PID

关注:

  • Loaded
  • Unloaded

类不断增长可能:

  • 热部署问题
  • 自定义 ClassLoader 泄漏


七、统一排查神器(推荐)

jcmd

查看支持命令:

jcmd PID help

常用:

jcmd PID GC.heap_info
jcmd PID GC.class_histogram
jcmd PID Thread.print
jcmd PID VM.flags

优点:

  • 比 jmap / jstack 更安全
  • 官方推荐
  • 不容易卡死进程


八、快速判断口诀

CPU高 → top → jstack
内存高 → jstat → jmap
FullGC多 → 看Old区
接口慢 → 看线程数
OOM → dump堆 → MAT


九、线上安全建议

  • ❌ 不要轻易 jmap -histo:live
  • ❌ 不要高峰期 dump 大堆
  • ✅ 优先用 jcmd
  • ✅ 先看 GC 日志


十、生产环境常用命令合集

jps -lvm
jstat -gc PID 1000
jstack PID > stack.txt
jmap -dump:format=b,file=heap.hprof PID
jcmd PID GC.heap_info


文章标签:

评论(0)