一、进程与内存分析工具
1. jps(Java Process Status)
功能:列出当前系统中所有 Java 进程的进程 ID 和主类名称。
常用参数:
-l
:显示主类的完整包路径或 JAR 文件路径。-v
:显示 JVM 启动时传递的参数。-m
:显示传递给main()
方法的参数。
2. jmap(Memory Map)
功能:生成堆内存快照和对象分布统计。
常用命令:
- 堆内存配置查询:-heap <pid> 查看堆内存分区(Eden/Survivor/Old)的容量和使用率。
- 存活对象统计:通过
-histo:live
参数触发 Full GC 后统计存活对象(生产环境慎用)。 - 堆转储文件生成:生成
.hprof
格式的堆转储文件(需结合 MAT 或 VisualVM 分析)。
3. jstat(JVM Statistics Monitoring Tool)
功能:实时监控内存、类加载和垃圾回收状态。
核心参数:
-gcutil
:显示各内存区域(Eden/Old/Metaspace)的使用百分比及 GC 次数/耗时。-gccapacity
:显示各内存区域的最小/最大容量阈值。-class
:监控类加载/卸载数量及耗时。
示例采样频率:
jstat -gcutil <pid> 1000 10
:每秒采样 1 次,共 10 次。
二、线程与锁分析工具
jstack(Stack Trace)
功能:生成 Java 进程的线程快照,用于诊断死锁或线程阻塞问题。
关键操作:
- 导出线程堆栈:将结果重定向到文件(如
thread_dump.log
)。 - 强制生成快照:使用
-F
参数在进程无响应时强制生成。
死锁检测方法:
在日志中搜索 deadlock
关键词,查看持有锁的线程堆栈信息。
三、垃圾回收调优参数
1. 收集器选择
- G1 收集器(默认推荐):
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
(设置最大停顿时间目标)
- CMS 收集器(低延迟场景):
-XX:+UseConcMarkSweepGC
2. GC 日志配置
-Xloggc:<file_path>
:指定 GC 日志文件路径。-XX:+PrintGCDetails
:输出详细的 GC 事件信息。-XX:+PrintGCDateStamps
:在日志中增加时间戳。
四、内存参数优化
1. 堆内存配置
-Xms4g -Xmx4g
:固定堆大小,避免动态扩容引发性能波动。-XX:MetaspaceSize=256m
:设置元空间初始大小,防止频繁扩容。-XX:SurvivorRatio=8
:调整新生代 Eden 区与 Survivor 区的容量比例(默认 8:1:1)。
2. 内存溢出诊断
-XX:+HeapDumpOnOutOfMemoryError
:在 OOM 时自动生成堆转储文件。-XX:HeapDumpPath=./dump.hprof
:指定堆转储文件保存路径。
五、高级诊断工具
jcmd(JVM Command)
功能:集成化诊断工具(JDK 7+ 支持),支持查询 JVM 参数、生成堆/线程快照等。
常用命令:
VM.flags
:查看 JVM 启动参数及默认值。GC.heap_info
:输出堆内存摘要(等效于jmap -heap
)。JFR.start
:启动 Java Flight Recorder 记录性能事件(需商业许可)。