在 Java 应用运维中,我们经常需要查看 JVM 的堆内存使用、GC 频率等信息,jstat 就是 JDK 自带的轻量级、无侵入的监控神器,无需额外安装,开箱即用。
这篇博客带你快速掌握 jstat 核心用法,日常排查 GC 问题足够用。
一、jstat 是什么?
jstat(JVM Statistics Monitoring Tool)是 JDK 内置的命令行工具,用于实时监控 JVM 的类加载、内存、垃圾回收、JIT 编译等运行时数据。
特点:
无需重启应用,直接 attach 运行中的 Java 进程
轻量级,性能消耗极低
支持实时刷新数据,适合长期监控
能直接看到 GC 次数、耗时、堆内存分区使用情况
二、前置条件
已安装
JDK(自带 jstat,JRE 没有)配置好 JDK 环境变量
拥有目标 Java 进程的访问权限
三、核心命令(直接复制可用)
1. 先获取 Java 进程 PID
jps -l
输出示例:
12345 com.example.Application
67890 org.apache.tomcat.startup.Bootstrap
记住你要监控的进程 PID(比如 12345)。
2. 最常用:GC 整体监控(推荐)
# 格式:jstat -gc <PID> <刷新间隔ms> <刷新次数>
jstat -gc 12345 1000 10
含义:每隔 1 秒输出一次 GC 信息,共输出 10 次后停止。
关键字段说明(日常重点看这几个):
S0C/S1C:Survivor0/1 区总容量S0U/S1U:Survivor0/1 区使用量EC/EU:Eden 区总容量/使用量OC/OU:老年代总容量/使用量MC/MU:元空间总容量/使用量YGC/YGT:Young GC 次数/总耗时FGC/FGCT:Full GC 次数/总耗时GCT:所有 GC 总耗时
3. 查看 GC 利用率(更直观)
jstat -gcutil 12345 1000
输出百分比格式,一眼看出内存使用率:
S0:Survivor0 使用率E:Eden 使用率O:老年代使用率M:元空间使用率YGC/YGT:Young GC 次数/耗时FGC/FGCT:Full GC 次数/耗时
4. 查看 编译、类加载 信息
jstat -compiler 12345
# 类加载统计
jstat -class 12345
四、实战排查思路(简单好用)
Full GC 频繁:看
FGC快速增长,OU居高不下 → 可能存在内存泄漏Young GC 频繁:
YGC增长快 → Eden 区太小,或短生命周期对象过多GC 耗时过长:
GCT占比高 → 影响应用响应速度
五、总结
jstat 是 Java 线上问题排查的入门必备工具,不需要界面、不需要修改代码,一条命令就能拿到最关键的 GC 和内存 数据。
日常最推荐两条命令:
jstat -gcutil <PID> 1000
# 详细 GC 内存数据
jstat -gc <PID> 1000
- jstat 是 JDK 自带轻量级 JVM 监控工具,专注 GC 和内存监控
总结
核心命令:jps 查 PID → jstat -gc/-gcutil 监控
重点关注:FGC(Full GC 次数)、OU(老年代使用)、GCT(总耗时)
无侵入、低开销,适合线上环境直接使用