JDK自带的jstat命令该怎么用详解

 更新时间:2025年10月20日 12:01:17   作者:爪哇手记  
jstat是jdk的命令(查看jvm的统计信息),可以监控类似类加载信息,GC信息等,这篇文章主要介绍了JDK自带的jstat命令该怎么用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、基础语法

jstat - [-t] [-h]  [ []]
  • option:监控类型(如-gcutil监控GC百分比)。
  • vmid:Java进程ID(通过jps获取)。
  • interval:采样间隔(单位毫秒或秒,默认毫秒)。
  • count:采样次数(默认无限次)。
  • -t:添加时间戳列。
  • -h:每输出``行后显示表头。

二、常用选项及输出解读

监控GC及内存使用(最常用)

  • 命令:
    jstat -gcutil  1000 10  每秒采样一次,共10次
    
  • 输出示例:
    S0  S1  E    O     M     CCS   YGC YGCT  FGC FGCT  GCT
    0.0 12.5 78.3 35.2  89.6  85.4  45  0.32  3   0.15  0.47
    
  • 关键字段:
    • S0/S1:Survivor区使用率(过高可能Survivor不足)。
    • E:Eden区使用率(接近100%触发Young GC)。
    • O:老年代使用率(持续增长可能内存泄漏)。
    • YGC/YGCT:Young GC次数及总耗时(频繁Young GC需增大新生代)。
    • FGC/FGCT:Full GC次数及总耗时(频繁Full GC需优化老年代)。

查看内存容量细节

  • 命令:
    jstat -gc   显示各区域大小(字节)
    
  • 输出示例:
    S0C  S1C  S0U  S1U  EC    EU    OC      OU    MC      MU     YGC  YGCT  FGC  FGCT  GCT
    64   64   0    16   1024  800   4096    1500  2560    2000   12   0.08  3    0.15  0.23
    
  • 关键字段:
    • S0C/S1C:Survivor区容量(单位KB)。
    • EC/EU:Eden区容量及使用量。
    • OC/O:老年代容量及使用量。

分析类加载

  • 命令:
    jstat -class   查看类加载/卸载情况
    
  • 输出示例:
    Loaded  Bytes  Unloaded  Bytes  Time
    12345   2345.6  0         0.0    0.52
    
  • 关键字段:
    • Loaded:已加载类数量(突增可能动态生成类)。
    • Unloaded:卸载类数量(非0可能类加载泄漏)。

追踪GC原因

  • 命令:
    jstat -gccause   显示最近一次GC原因
    
  • 输出示例:
    S0   S1  E    O     M     CCS   YGC YGCT  FGC FGCT  GCT  LGCC             GCC
    0.0 12.5 78.3 35.2  89.6  85.4  45  0.32  3   0.15  0.47 Allocation Failure No GC
    
  • 关键字段:
    • LGCC:最近一次GC原因(如Allocation Failure表示Eden区满)。

三、典型场景应用

诊断Young GC频繁

jstat -gcutil  1000  持续监控Eden区使用率
  • 问题表现:E列接近100%,YGC次数快速增长。
  • 解决方案:增大新生代(-Xmn)或调整Survivor比例(-XX:SurvivorRatio)。

定位内存泄漏

jstat -gc  60000 10  每分钟采样,观察老年代增长
  • 问题表现:OU持续增长且FGC频繁。
  • 解决方案:生成堆转储(jmap -dump),用MAT分析泄漏对象。

分析元空间溢出

jstat -gcutil   查看Metaspace使用率
  • 问题表现:M列接近100%。
  • 解决方案:限制元空间大小(-XX:MaxMetaspaceSize=256m)。

四、注意事项

  1. 远程监控:
    • 需配置jstatd服务(JDK 8后推荐用jcmd替代)。
    • 命令示例:
      jstat -gcutil @ 1000  远程监控
      
  2. 输出解读:
    • 百分比列(如-gcutil)更直观,容量列(如-gc)适合分析绝对值。
    • 结合-t参数添加时间戳,便于关联业务峰值。
  3. 与其他工具联动:
    • 发现GC异常后,用jmap -dump生成堆转储,再用MAT分析对象分布。
    • 长期监控可通过脚本定期采集jstat数据,结合awk分析趋势。

五、完整选项参考

选项功能典型输出字段
-gcnew新生代GC详情TT(对象年龄阈值)、DSS(Survivor目标大小)
-gcold老年代GC详情MU(元空间使用量)、FGCT(Full GC总耗时)
-printcompilationJIT编译统计Compiled(编译方法数)、Failed(编译失败数)

通过灵活组合选项和参数,jstat可成为JVM性能调优的核心工具。建议结合具体问题选择监控维度,并持续观察数据变化。

到此这篇关于JDK自带的jstat命令该怎么用的文章就介绍到这了,更多相关JDK自带jstat命令使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java设计模式之观察者模式(Observer模式)

    Java设计模式之观察者模式(Observer模式)

    这篇文章主要介绍了Java设计模式之观察者模式(Observer模式),文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

    Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

    本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供代码示例与常见问题解决方案,帮助开发者实现跨平台文档自动化处理与编辑功能,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  • java8 stream自定义分组求和并排序的实现

    java8 stream自定义分组求和并排序的实现

    这篇文章主要介绍了java8 stream自定义分组求和并排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • RocketMQMessageListener注解对rocketmq消息的消费实现机制

    RocketMQMessageListener注解对rocketmq消息的消费实现机制

    这篇文章主要为大家介绍了RocketMQMessageListener注解对rocketmq消息的消费实现机制源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • java中Calendar与Date类型互相转换的方法

    java中Calendar与Date类型互相转换的方法

    这篇文章主要介绍了java中Calendar与Date类型互相转换的方法,Calendar与Date类型是我们日常开发中常用的两种数据类型,它们用于不同的场景,两者具有不同的方法,接下来通过实例给大家详解,需要的朋友可以参考下
    2022-09-09
  • 如何在Java中创建线程通信的四种方式你知道吗

    如何在Java中创建线程通信的四种方式你知道吗

    开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。下面我们来一起学习如何解决吧
    2021-09-09
  • jsch中ChannelShell与ChannelExec的区别及说明

    jsch中ChannelShell与ChannelExec的区别及说明

    这篇文章主要介绍了jsch中ChannelShell与ChannelExec的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Spring中基于Java的配置@Configuration和@Bean用法详解

    Spring中基于Java的配置@Configuration和@Bean用法详解

    这篇文章主要介绍了Spring中基于Java的配置@Configuration和@Bean用法详解,Spring中为了减少xml中配置,可以声明一个配置类(例如SpringConfig)来对bean进行配置。,需要的朋友可以参考下
    2019-06-06
  • hibernate 命名查询如何实现

    hibernate 命名查询如何实现

    Hibernate允许在映射文件中定义字符串形式的查询语句,这种查询方式成为命名查询,需要的朋友可以参考下
    2012-11-11
  • servlet配置方法及其生命周期详解

    servlet配置方法及其生命周期详解

    下面小编就为大家带来一篇servlet配置方法及其生命周期详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论