`
喻红叶
  • 浏览: 41098 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JDK自带工具-jstat详解

 
阅读更多

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id(使用jps查看),和所选参数。参考格式如下:

jstat [ option vmid [ interval[s|ms] [count] ] ]

参数interval和count代表查询间隔和查询次数,可以列出当前JVM版本支持的选项,常见的有

  • l class (类加载器)
  • l compiler (JIT)
  • l gc (GC堆状态)
  • l gccapacity (各区大小)
  • l gccause (最近一次GC统计和原因)
  • l gcnew (新区统计)
  • l gcnewcapacity (新区大小)
  • l gcold (老区统计)
  • l gcoldcapacity (老区大小)
  • l gcpermcapacity (永久区大小)
  • l gcutil (GC统计汇总)
  • l printcompilation (HotSpot编译统计)

1、jstat –class<pid> : 显示加载class的数量,及所占空间等信息。

显示列名

具体描述

Loaded

装载的类的数量

Bytes

装载类所占用的字节数

Unloaded

卸载类的数量

Bytes

卸载类的字节数

Time

装载和卸载类所花费的时间

2、jstat -compiler <pid>显示VM实时编译的数量等信息。

显示列名

具体描述

Compiled

编译任务执行数量

Failed

编译任务执行失败数量

Invalid

编译任务执行失效数量

Time

编译任务消耗时间

FailedType

最后一个编译失败任务的类型

FailedMethod

最后一个编译失败任务所在的类及方法

3、jstat -gc <pid>: 可以显示gc的信息,查看gc的次数,及时间。

显示列名

具体描述

S0C

年轻代中第一个survivor(幸存区)的容量 (字节)

S1C

年轻代中第二个survivor(幸存区)的容量 (字节)

S0U

年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U

年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC

年轻代中Eden(伊甸园)的容量 (字节)

EU

年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC

Old代的容量 (字节)

OU

Old代目前已使用空间 (字节)

PC

Perm(持久代)的容量 (字节)

PU

Perm(持久代)目前已使用空间 (字节)

YGC

从应用程序启动到采样时年轻代中gc次数

YGCT

从应用程序启动到采样时年轻代中gc所用时间(s)

FGC

从应用程序启动到采样时old代(全gc)gc次数

FGCT

从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

从应用程序启动到采样时gc用的总时间(s)

4、jstat -gccapacity <pid>:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

显示列名

具体描述

NGCMN

年轻代(young)中初始化(最小)的大小(字节)

NGCMX

年轻代(young)的最大容量 (字节)

NGC

年轻代(young)中当前的容量 (字节)

S0C

年轻代中第一个survivor(幸存区)的容量 (字节)

S1C

年轻代中第二个survivor(幸存区)的容量 (字节)

EC

年轻代中Eden(伊甸园)的容量 (字节)

OGCMN

old代中初始化(最小)的大小 (字节)

OGCMX

old代的最大容量(字节)

OGC

old代当前新生成的容量 (字节)

OC

Old代的容量 (字节)

PGCMN

perm代中初始化(最小)的大小 (字节)

PGCMX

perm代的最大容量 (字节)

PGC

perm代当前新生成的容量 (字节)

PC

Perm(持久代)的容量 (字节)

YGC

从应用程序启动到采样时年轻代中gc次数

FGC

从应用程序启动到采样时old代(全gc)gc次数

5、jstat -gcutil <pid>:统计gc信息

显示列名

具体描述

S0

年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1

年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E

年轻代中Eden(伊甸园)已使用的占当前容量百分比

O

old代已使用的占当前容量百分比

P

perm代已使用的占当前容量百分比

YGC

从应用程序启动到采样时年轻代中gc次数

YGCT

从应用程序启动到采样时年轻代中gc所用时间(s)

FGC

从应用程序启动到采样时old代(全gc)gc次数

FGCT

从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

从应用程序启动到采样时gc用的总时间(s)

6、jstat -gcnew <pid>:年轻代对象的信息。

显示列名

具体描述

S0C

年轻代中第一个survivor(幸存区)的容量 (字节)

S1C

年轻代中第二个survivor(幸存区)的容量 (字节)

S0U

年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U

年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

TT

持有次数限制

MTT

最大持有次数限制

EC

年轻代中Eden(伊甸园)的容量 (字节)

EU

年轻代中Eden(伊甸园)目前已使用空间 (字节)

YGC

从应用程序启动到采样时年轻代中gc次数

YGCT

从应用程序启动到采样时年轻代中gc所用时间(s)

7、jstat -gcnewcapacity<pid>: 年轻代对象的信息及其占用量。

显示列名

具体描述

NGCMN

年轻代(young)中初始化(最小)的大小(字节)

NGCMX

年轻代(young)的最大容量 (字节)

NGC

年轻代(young)中当前的容量 (字节)

S0CMX

年轻代中第一个survivor(幸存区)的最大容量 (字节)

S0C

年轻代中第一个survivor(幸存区)的容量 (字节)

S1CMX

年轻代中第二个survivor(幸存区)的最大容量 (字节)

S1C

年轻代中第二个survivor(幸存区)的容量 (字节)

ECMX

年轻代中Eden(伊甸园)的最大容量 (字节)

EC

年轻代中Eden(伊甸园)的容量 (字节)

YGC

从应用程序启动到采样时年轻代中gc次数

FGC

从应用程序启动到采样时old代(全gc)gc次数

8、jstat -gcold <pid>:old代对象的信息。

显示列名

具体描述

PC

Perm(持久代)的容量 (字节)

PU

Perm(持久代)目前已使用空间 (字节)

OC

Old代的容量 (字节)

OU

Old代目前已使用空间 (字节)

YGC

从应用程序启动到采样时年轻代中gc次数

FGC

从应用程序启动到采样时old代(全gc)gc次数

FGCT

从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

从应用程序启动到采样时gc用的总时间(s)

9、stat -gcoldcapacity <pid>: old代对象的信息及其占用量。

显示列名

具体描述

OGCMN

old代中初始化(最小)的大小 (字节)

OGCMX

old代的最大容量(字节)

OGC

old代当前新生成的容量 (字节)

OC

Old代的容量 (字节)

YGC

从应用程序启动到采样时年轻代中gc次数

FGC

从应用程序启动到采样时old代(全gc)gc次数

FGCT

从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

从应用程序启动到采样时gc用的总时间(s)

10、jstat -gcpermcapacity<pid>: perm对象的信息及其占用量。

显示列名

具体描述

PGCMN

perm代中初始化(最小)的大小 (字节)

PGCMX

perm代的最大容量 (字节)

PGC

perm代当前新生成的容量 (字节)

PC

Perm(持久代)的容量 (字节)

YGC

从应用程序启动到采样时年轻代中gc次数

FGC

从应用程序启动到采样时old代(全gc)gc次数

FGCT

从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

从应用程序启动到采样时gc用的总时间(s)

11、jstat -printcompilation <pid>:当前VM执行的信息。

显示列名

具体描述

Compiled

编译任务的数目

Size

方法生成的字节码的大小

Type

编译类型

Method

类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的



举例:

使用jps -l 查看LVMID(本地虚拟机ID)和主类全名

15659 sun.tools.jps.Jps
15333

得到LVMID后,我们查看15333进程(eclipse进程)的GC状况:

jstat -gc 15333 1s 3 (查看15333进程的GC状况,每秒查一次,总共查询3次)

S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
4800.0 4800.0 0.0 0.0 38720.0 560.9 96572.0 40787.0 48384.0 48368.7 21 0.308 25 3.792 4.100
4800.0 4800.0 0.0 0.0 38720.0 560.9 96572.0 40787.0 48384.0 48368.7 21 0.308 25 3.792 4.100
4800.0 4800.0 0.0 0.0 38720.0 560.9 96572.0 40787.0 48384.0 48368.7 21 0.308 25 3.792 4.100

从上面可以看到总共发生了发生了21次Minor GC(新生代),和25次Full GC(老年代),总耗时4.100秒;21次 Minor GC耗时0.308秒,25次的Full GC耗时3.792秒,Full GC的耗时远超Minor GC。


注:以上内容大部分转自http://www.cnblogs.com/litaobupt/articles/3044982.html,其中示例代码部分是本人所做。

分享到:
评论

相关推荐

    JDK自带VM分析工具

    ### JDK 自带 VM 分析工具详解 在 Java 开发领域,深入理解并有效利用 Java 开发工具包(JDK)自带的各种虚拟机(VM)分析工具对于提高应用程序性能至关重要。本文将详细介绍 JDK 自带的几个核心 VM 分析工具:jps...

    jvm工具、参数调优&调试技巧

    - **功能介绍**:`jconsole`是JDK自带的一个GUI工具,用于监控JVM的运行状态。 - **主要功能**: - 监控JVM内存使用情况。 - 查看垃圾收集器的状态。 - 查看线程信息。 ##### 9. Memory Analyzer Tool(MAT)...

    jdk-18.0.1.1_macos-aarch64_bin.dmg.zip

    3. **调试与性能分析**:JDK自带的`jdb`调试工具和`jmap`、`jstat`等性能分析工具,可以帮助开发者定位问题,优化代码。 4. **模块系统**:JDK 18.0.1.1支持Java的模块系统(Project Jigsaw),这使得大型项目管理...

    JVM命令行监测工具详解

    jhat是JDK自带的堆分析工具,用于分析由jmap导出的内存映像文件。但jhat已不再推荐使用,因为它在处理大型堆文件时可能效率低下。现在更推荐使用如JProfiler、VisualVM等图形化工具进行分析。 总结: 这些命令行...

    JAVA JVM性能调优监控工具详解

    `jps`是JDK自带的一个简单实用的工具,用于列出当前正在运行的所有Java应用程序的进程ID以及基本状态信息。其语法格式如下: ```shell jps [options] [hostid] ``` 如果不指定`hostid`,则默认为当前主机。`jps`的...

    JAVA-JVM参数讲解

    - **概述**:`jps`(Java Process Status Tool)是JDK自带的一个实用工具,用于显示当前计算机上所有正在运行的Java应用程序的进程ID(PID)及其主类名或JAR包名。这对于快速检查服务是否启动成功非常有用。 - **...

    Java性能调优大全

    4. **jstat详解**:jstat是JDK自带的命令行工具,用于收集JVM的各种统计信息,包括类装载、内存、垃圾收集、JIT编译等。通过定期执行jstat,开发者可以分析应用的内存使用模式、垃圾收集效率等,从而判断是否需要...

    JVM堆模型

    1. **JDK自带工具说明.doc**:这个文档可能包含了JDK提供的各种工具,如`jps`(Java进程查看器)、`jstat`(统计JVM各种运行时数据)、`jinfo`(配置JVM参数)、`jmap`(映射内存到文件)、`jhat`(分析堆转储文件)...

    Troubleshooting Guide for Java

    3. **分析数据**:使用JDK自带的工具或第三方工具来分析生成的数据文件。 #### 三、jcmd工具 jcmd是一种非常强大的命令行工具,用于向正在运行的Java进程发送指令。它支持的操作包括但不限于触发GC、查看JVM参数、...

    java开发 线上问题排查命令详解

    jmap命令是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成堆转储快照(Heap Dump)。 常用指令: * jmap -heap 3331:查看java 堆...

    Tomcat调优配置技巧[文].pdf

    使用`jstat`或`jmap`等JDK自带的工具,可以实时监控Tomcat进程的内存使用情况,及时发现内存泄漏或不足的问题。 十一、解决Linux下静态化乱码问题 在Linux环境下,静态化过程中出现乱码可能是由于字符编码不一致...

Global site tag (gtag.js) - Google Analytics