jstat工具详解-jvm调优必会 (附jvm面试宝典)

jvm面试宝典

jvm内存篇面试宝典

jstat简介

jstat (Java Virtual Machine Statistics Monitoring Tool) 是用于监控和分析 Java 虚拟机 (JVM) 性能的工具。它提供了 JVM 的运行时信息,比如垃圾收集的状态、内存使用情况、类加载信息等。jstat 是 JDK 中自带的命令行工具,可以帮助开发者和运维人员排查和优化 JVM 性能问题。

jstat 命令的基本语法为:

jstat [option] [vmid] [interval] [count]
  • option:指定要查看的统计信息类型。
  • vmid:JVM 实例的进程 ID(PID)。
  • interval(可选):每次输出的时间间隔(单位:毫秒)。
  • count(可选):输出的次数。

常用选项

  • -class:显示类加载的相关统计信息,包括类的装载、卸载数量,以及类占用的内存。
  • -compiler:显示 JIT 编译器的相关统计信息,包括编译任务的数量、花费的时间等。
  • -gc:显示垃圾收集相关的统计信息,包括堆内存的使用情况,YGC(Young Generation GC)和 FGC(Full GC)的次数和时间。
  • -gccapacity:显示堆内存中各个区域(Eden、Survivor、Old)的容量和使用情况。
  • -gcnew:显示新生代(Young Generation)的垃圾收集信息,包括 Eden 和 Survivor 区的使用情况。
  • -gcold:显示老年代(Old Generation)的垃圾收集信息,包括老年代的容量和使用情况。
  • -gcutil:显示堆内存的总体使用情况,以及 YGC 和 FGC 的次数和时间(常用于查看堆内存使用效率)。
  • -printcompilation:显示 JIT 编译的相关信息,包括已编译的方法等。

输出详解

1. jstat -class

显示类加载信息。

示例输出:

Loaded  Bytes  Unloaded  Bytes   Time
  2500   2.4M      500   1.2M    2.34
  • Loaded: 已加载的类数量。
  • Bytes: 已加载类所占的字节数。
  • Unloaded: 已卸载的类数量。
  • Bytes: 已卸载类释放的字节数。
  • Time: 类加载和卸载所花费的总时间(秒)。

2. jstat -gc

显示垃圾收集(GC)相关的信息。

示例输出:

S0C    S1C    S0U    S1U    EC     EU     OC     OU      MC      MU    CCSC  CCSU   YGC     YGCT   FGC    FGCT     GCT
512.0  512.0  0.0    240.0  1024.0 480.0  2048.0 1024.0  448.0  400.0  64.0  48.0   12      0.025  1      0.150    0.175
  • S0C: 第一个 Survivor 区的容量 (KB)。
  • S1C: 第二个 Survivor 区的容量 (KB)。
  • S0U: 第一个 Survivor 区的使用量 (KB)。
  • S1U: 第二个 Survivor 区的使用量 (KB)。
  • EC: Eden 区的容量 (KB)。
  • EU: Eden 区的使用量 (KB)。
  • OC: 老年代(Old Generation)的容量 (KB)。
  • OU: 老年代的使用量 (KB)。
  • MC: Metaspace(方法区)的容量 (KB)。
  • MU: Metaspace 的使用量 (KB)。
  • CCSC: 压缩类空间(Compressed Class Space)的容量 (KB)。
  • CCSU: 压缩类空间的使用量 (KB)。
  • YGC: 年轻代(Young Generation)GC 的次数。
  • YGCT: 年轻代 GC 总时间(秒)。
  • FGC: 老年代(Full GC)的次数。
  • FGCT: Full GC 总时间(秒)。
  • GCT: GC 总时间(秒)。

3. jstat -gcutil

显示垃圾收集活动期间各代(新生代和老年代)的使用百分比。

示例输出:

S0     S1     E      O      M      CCS     YGC    YGCT   FGC    FGCT    GCT
0.00   75.00  47.14  50.00  89.12  50.23   12     0.025  1      0.150   0.175
  • S0: 第一个 Survivor 区的使用百分比。
  • S1: 第二个 Survivor 区的使用百分比。
  • E: Eden 区的使用百分比。
  • O: 老年代的使用百分比。
  • M: Metaspace 的使用百分比。
  • CCS: 压缩类空间的使用百分比。
  • YGC: 年轻代 GC 的次数。
  • YGCT: 年轻代 GC 的总时间(秒)。
  • FGC: Full GC 的次数。
  • FGCT: Full GC 的总时间(秒)。
  • GCT: GC 的总时间(秒)。

4. jstat -gccapacity

显示堆内存各个区域的容量信息。

示例输出:

NGCMN    NGCMX     NGC    S0C    S1C     EC     OGCMN    OGCMX     OGC      OC
1024.0  4096.0    2048.0  512.0  512.0  1024.0  2048.0  8192.0    4096.0   4096.0
  • NGCMN: 新生代(Young Generation)的最小容量。
  • NGCMX: 新生代的最大容量。
  • NGC: 新生代的当前容量。
  • S0C: 第一个 Survivor 区的当前容量。
  • S1C: 第二个 Survivor 区的当前容量。
  • EC: Eden 区的当前容量。
  • OGCMN: 老年代的最小容量。
  • OGCMX: 老年代的最大容量。
  • OGC: 老年代的当前容量。
  • OC: 老年代的总容量。

5. jstat -gcnew

显示新生代(Young Generation)的垃圾收集信息。

示例输出:

S0C    S1C    S0U    S1U    TT     MTT    DSS    EC      EU      YGC     YGCT
512.0  512.0  0.0    240.0  12     15     512.0  1024.0  480.0   12      0.025
  • TT: 在下次垃圾收集前的 Tenuring Threshold(晋升阈值)。
  • MTT: 自 JVM 启动以来的最大 Tenuring Threshold
  • DSS: 期望的 Survivor 区大小。

6. jstat -printcompilation

显示即时编译器(JIT)编译的相关信息。

示例输出:

Compiled  Size  Type  Method
1234      5678  1     java/lang/String.charAt(I)C
  • Compiled: 已编译的方法数量。
  • Size: 已编译代码占用的字节数。
  • Type: 编译类型(0 表示不在用,1 表示标准编译,2 表示 OSR 编译)。
  • Method: 方法的全限定名。

7. jstat -compiler

显示即时编译器(JIT)的总体统计信息。

示例输出:

Compiled  Failed  Invalid  Time  FailedType  FailedMethod
1234      0       0        12.34 0           None
  • Compiled: 已编译的方法数量。
  • Failed: 编译失败的方法数量。
  • Invalid: 编译无效的方法数量。
  • Time: 编译总时间(秒)。
  • FailedType: 最后一次编译失败的类型。
  • FailedMethod: 最后一次编译失败的方法的全限定名。
JVM工具命令详解》是一份预习资料,主要介绍了Java虚拟机(JVM过程中使用的一些工具命令。这些工具命令可以帮助开发人员诊断和JVM的性能问题。 文中首先介绍了常用的JVM工具命令,包括jps、jstat、jinfo、jmap、jhat等。这些命令可以用于查看JVM进程信息、统计JVM内存和线程情况、获取JVM配置参数等。通过使用这些工具命令,开发人员可以快速定位JVM性能瓶颈所在,进行化。 接下来,文中详细介绍了每个工具命令的使用方法和参数解释。例如,jstat命令可以用于查看JVM内存情况,包括堆内存使用量、垃圾回收情况等。而jmap命令可以用于生成堆内存转储文件,帮助开发人员分析内存泄漏问题。通过掌握这些工具命令的使用,开发人员可以更加高效地进行JVM。 此外,文中还介绍了一些实际的案例,通过使用这些工具命令来解决实际的JVM性能问题。这些案例包括内存泄漏、线程死锁、CPU占用过高等问题。通过学习这些案例,开发人员可以更好地理解如何利用工具命令来诊断和解决JVM性能问题。 总的来说,《JVM工具命令详解》是一份非常实用的预习资料,适合那些需要深入学习JVM性能化的开发人员。通过学习和掌握这些工具命令,开发人员能够更加高效地进行JVM,提升应用程序的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值