简单易懂的 JVM 监控工具:jstat 入门教程

在 Java 应用运维中,我们经常需要查看 JVM 的堆内存使用、GC 频率等信息,jstat 就是 JDK 自带的轻量级、无侵入的监控神器,无需额外安装,开箱即用。

这篇博客带你快速掌握 jstat 核心用法,日常排查 GC 问题足够用。

一、jstat 是什么?

jstat(JVM Statistics Monitoring Tool)是 JDK 内置的命令行工具,用于实时监控 JVM 的类加载、内存、垃圾回收、JIT 编译等运行时数据

特点:

  • 无需重启应用,直接 attach 运行中的 Java 进程

  • 轻量级,性能消耗极低

  • 支持实时刷新数据,适合长期监控

  • 能直接看到 GC 次数、耗时、堆内存分区使用情况

二、前置条件

  1. 已安装 JDK(自带 jstat,JRE 没有)

  2. 配置好 JDK 环境变量

  3. 拥有目标 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

四、实战排查思路(简单好用)

  1. Full GC 频繁:看 FGC 快速增长,OU 居高不下 → 可能存在内存泄漏

  2. Young GC 频繁YGC 增长快 → Eden 区太小,或短生命周期对象过多

  3. GC 耗时过长GCT 占比高 → 影响应用响应速度

五、总结

jstat 是 Java 线上问题排查的入门必备工具,不需要界面、不需要修改代码,一条命令就能拿到最关键的 GC内存 数据。

日常最推荐两条命令:

jstat -gcutil <PID> 1000
# 详细 GC 内存数据
jstat -gc <PID> 1000

  1. jstat 是 JDK 自带轻量级 JVM 监控工具,专注 GC 和内存监控

总结

  1. 核心命令:jps 查 PID → jstat -gc/-gcutil 监控

  2. 重点关注:FGC(Full GC 次数)、OU(老年代使用)、GCT(总耗时)

  3. 无侵入、低开销,适合线上环境直接使用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容