沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 基础篇

  • 集合篇

  • 并发篇

  • JVM

    • JVM基础入门
    • JVM常问
    • jstat的应用
      • 简介
      • 如何使用 jstat 查看 JVM 运行状态?
      • 常用 jstat 选项
        • 示例
      • jstat -gc 输出字段解析
        • 如何分析 FGC 的影响
        • 优化建议
      • 学习参考
  • 新特性

  • Java核心技术卷I

  • Java
  • JVM
沉梦听雨
2025-02-10
目录

jstat的应用

# jstat 的应用

# 简介

jstat(JVM Statistics Monitoring Tool)是 Java 提供的一个命令行工具,用于监视 JVM 的内存使用、垃圾回收(GC)情况等运行时统计信息。它可以帮助开发者分析和优化 Java 应用的性能。

# 如何使用 jstat 查看 JVM 运行状态?

jstat 主要用于监控 JVM 运行状态,一般格式如下:

jstat [options] <pid> [interval] [count]
1
  • options:指定要查询的信息类型(如 GC、堆信息等)。
  • pid:目标 Java 进程的 PID,可通过 jps 命令获取。
  • interval(可选):时间间隔(毫秒),用于周期性监控。
  • count(可选):输出的次数。

# 常用 jstat 选项

选项 作用
jstat -gc <pid> 查看 GC 相关统计数据(包括新生代、老年代、Metaspace)
jstat -gcutil <pid> 查看 GC 各个区域的利用率(百分比形式)
jstat -gccapacity <pid> 显示 GC 各个内存区域的容量
jstat -class <pid> 显示类加载相关信息
jstat -compiler <pid> 显示 JIT 编译统计信息
jstat -printcompilation <pid> 查看 JIT 编译的方法

# 示例

  1. 查看所有 Java 进程

    jps
    
    1

    输出示例:

    1234 MyJavaApp
    5678 JConsole
    
    1
    2

    这里 1234 是 Java 进程的 PID。

  2. 查看 GC 统计信息

    jstat -gc 1234 1000 10
    
    1
    • 1234 是进程 ID
    • 1000 表示每秒采样一次
    • 10 表示采样 10 次
  3. 查看 GC 利用率

    jstat -gcutil 1234 1000 5
    
    1

如果你想具体分析应用的 GC 开销、对象分配情况,可以结合 jstat -gc 和 jstat -gcutil 监控,然后调整 JVM 参数进行优化。

# jstat -gc 输出字段解析

jstat -gc 输出中的 FGC 列表示 Full GC(完全垃圾回收)发生的次数。当 Full GC 发生时,JVM 会清理整个堆(包括年轻代和老年代),通常会导致较长的 STW(Stop-The-World)暂停,因此 Full GC 过多通常意味着性能问题。

执行命令:

jstat -gc <pid> 1000 10
1

示例输出:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC      MU     CCSC   CCSU     YGC    YGCT    FGC   FGCT     GCT
512.0  512.0  0.0   64.0   173568.0  68832.5  349696.0  194931.1  44032.0  41197.8  5888.0  0.0   10    0.152   6   6.345   6.497
1
2

其中:

  • S0C / S1C:Survivor 0/1 区的容量(KB)。
  • S0U / S1U:Survivor 0/1 区当前使用量(KB)。
  • EC / EU:Eden 区的容量和使用量(KB)。
  • OC / OU:老年代(Old Generation)的容量和使用量(KB)。
  • MC / MU:方法区(Metaspace)的容量和使用量(KB)。
  • CCSC / CCSU:压缩类空间的容量和使用量(KB)。
  • YGC:Young GC(Minor GC)发生的次数。
  • YGCT:Young GC 耗费的时间(秒)。
  • FGC:Full GC 发生的次数。
  • FGCT:Full GC 耗费的时间(秒)。
  • GCT:GC 总耗时(YGCT + FGCT)。

# 如何分析 FGC 的影响

  • 如果 FGC 频繁增加,并且 FGCT(Full GC 耗时)很高,说明 JVM 可能存在内存回收不及时、老年代溢出、对象晋升过快等问题,可能需要调整堆大小、GC 策略或代码优化。
  • 如果 YGC 远高于 FGC,说明年轻代回收频繁,但 Full GC 仍然不多,通常是正常现象。
  • GCT(GC 总耗时)占比过高,可能说明 GC 对应用性能影响较大,需要优化。

# 优化建议

  1. 减少 Full GC 触发频率

    • 增大 -Xmx 和 -Xms(堆大小)。
    • 使用 G1 GC (-XX:+UseG1GC),减少 Full GC 影响。
    • 限制 Metaspace 大小,避免 OutOfMemoryError 触发 Full GC。
  2. 优化对象分配

    • 减少大对象直接进入老年代(调整 -XX:PretenureSizeThreshold)。
    • 提高新生代比例,减少对象过快晋升(-Xmn,-XX:SurvivorRatio)。
  3. 监控 GC 详细日志

    • 启用 GC 日志分析:

      java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -jar yourapp.jar
      
      1
    • 使用 jstat -gcutil <pid> 1000 实时查看 GC 影响。


总结:

  • FGC 代表 Full GC 次数,过高可能导致性能下降。
  • 结合 YGCT、FGCT 和 GCT 分析 GC 对应用的影响。
  • 通过 GC 调优(增大堆、调整 GC 策略、优化对象分配)来减少 Full GC 发生的频率。

# 学习参考

  • jvm 性能调优工具之 jstat 命令详解 - 知乎 (opens new window)
  • 【JVM】jstat命令详解---JVM的统计监测工具-CSDN博客 (opens new window)
上次更新: 2025/2/12 16:35:19
JVM常问
JDK新特性

← JVM常问 JDK新特性→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式