一、命令行工具
1. jps (Java Process Status)
作用:列出当前系统中所有的 Java 进程
常用命令:jps -l # 显示进程ID和主类全名 jps -v # 显示JVM启动参数
输出示例:
1234 com.example.MainApp 5678 org.apache.catalina.startup.Bootstrap
2. jstat (JVM Statistics Monitoring Tool)
作用:实时监控 JVM 运行状态(GC、类加载、JIT编译等)
核心功能:jstat -gcutil <pid> 1000 5 # 每1秒打印1次GC统计,共5次
关键指标:
S0/S1
:Survivor 区使用率
E
:Eden 区使用率
O
:Old 区使用率
YGC/YGCT
:Young GC 次数/耗时
FGC/FGCT
:Full GC 次数/耗时
3. jinfo (Configuration Info for Java)
作用:查看和动态修改 JVM 参数
常用命令:jinfo -flags <pid> # 查看所有JVM参数 jinfo -flag MaxHeapSize <pid> # 查看特定参数 jinfo -flag +PrintGC <pid> # 动态启用PrintGC
4. jmap (Memory Map for Java)
作用:生成堆内存快照和内存统计
核心功能:典型场景:内存泄漏分析、对象分布统计
5. jhat (JVM Heap Analysis Tool)
作用:分析 jmap 生成的堆转储文件
使用流程:
生成堆转储:
jmap -dump:file=heap.bin <pid>
启动分析服务:
jhat heap.bin
浏览器访问:
http://localhost:7000/
功能:对象查询、引用链分析、内存泄漏检测
6. jstack (Stack Trace for Java)
作用:生成线程快照(thread dump)
关键命令:jstack -l <pid> > thread.txt # 生成线程快照并保存
诊断场景:
死锁检测(查找
deadlock
关键词)线程阻塞分析
CPU 飙高问题定位
二、图形化监控工具
jvisualvm.exe
是 JDK 自带的图形化监控诊断工具,与你jps
/jstack
/jmap
等属于同一套工具链,但提供可视化操作界面。以下是关键解析:
一、典型使用场景
1. 快速定位内存泄漏
步骤:
在进程列表中选择应用
点击 “堆 Dump” 生成快照
分析 “类” 标签页 → 按实例数/大小排序 → 定位可疑对象
2. 诊断 CPU 飙高
步骤:
打开 “抽样器” → 点击 CPU 按钮
查看 “热点方法” 排名
结合 线程快照 分析阻塞栈
3. 分析死锁
步骤:
打开 “线程” 标签页
点击 “检测死锁” → 自动标记死锁线程
二、与命令行工具对比
需求 推荐工具 原因 快速检查进程状态 jps
一条命令即完成 脚本自动化监控 jstat
适合集成到运维系统 深度分析内存泄漏 jvisualvm 可视化引用链,效率提升 10 倍+ 生产环境紧急诊断 jcmd
+jstack
轻量级,避免图形界面资源消耗 长期性能趋势分析 jvisualvm 支持保存快照对比历史数据
三、注意事项
版本兼容性:
JDK 8 及之前:内置
jvisualvm
JDK 9+:需单独下载(从 JDK 分离为独立项目)