JAVA性能分析命令速查表
已于 2026年03月03日 09:56 修改
访问次数:0
给你一份 JVM 生产排查速查表(高频实战版),按“问题现象 → 命令 → 关键点 → 下一步”整理,适合直接保存。
🔥 JVM 生产排查速查表
一、进程与基础信息
| 目的 | 命令 | 关键点 |
|---|---|---|
| 查看 Java 进程 | jps -lvm | 主类、JVM 参数 |
| 查看端口进程 | netstat -tunlp / lsof -i:端口 | 确认是否是目标进程 |
| 查看 JVM 参数 | jinfo -flags PID | GC 类型、堆大小 |
| 查看系统负载 | top | CPU、内存、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)