Java中jstat命令的使用详解

目录
  • jstat命令简介
  • jstat命令参数
  • 输出选项
  • -class选项
  • -compiler选项
  • -gc选项
  • -gccapacity选项
  • -gcutil选项
  • -gccause选项
  • -gcnew选项
  • -gcnewcapacity选项
  • -gcold选项
  • -gcoldcapacity选项
  • -gcmetacapacity选项
  • -printcompilation选项
  • 附实例使用:统计gc信息
  • 总结

jstat命令简介

jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的一个可以监控Java虚拟机各种运行状态信息的命令行工具。它可以显示Java虚拟机中的类加载、内存、垃圾收集、即时编译等运行状态的信息。

jstat命令参数

命令语法:

jstat generalOptions
jstat outputOptions [-t] [-h<lines>] <vmid> [<interval> [<count>]]

命令参数说明:

  • generalOptions:通用选项,如果指定一个通用选项,就不能指定任何其他选项或参数。它包括如下两个选项:
    • -help:显示帮助信息。
    • -options:显示outputOptions参数的列表。
  • outputOptions:输出选项,指定显示某一种Java虚拟机信息。
  • -t:把时间戳列显示为输出的第一列。这个时间戳是从Java虚拟机的开始运行到现在的秒数。
  • -h n:每显示n行显示一次表头,其中n为正整数。默认值为 0,即仅在第一行数据显示一次表头。
  • vmid:虚拟机唯一ID(LVMID,Local Virtual Machine Identifier),如果查看本机就是Java进程的进程ID。
  • interval:显示信息的时间间隔,单位默认毫秒。也可以指定秒为单位,比如:1s。如果指定了该参数,jstat命令将每个这段时间显示一次统计信息。
  • count:显示数据的次数,默认值是无穷大,这将导致jstat命令一直显示统计信息,直到目标JVM终止或jstat命令终止。

输出选项

如果不指定通用选项(generalOptions),则可以指定输出选项(outputOptions)。输出选项决定jstat命令显示的内容和格式,具体如下:

  • -class:显示类加载、卸载数量、总空间和装载耗时的统计信息。
  • -compiler:显示即时编译的方法、耗时等信息。
  • -gc:显示堆各个区域内存使用和垃圾回收的统计信息。
  • -gccapacity:显示堆各个区域的容量及其对应的空间的统计信息。
  • -gcutil:显示有关垃圾收集统计信息的摘要。
  • -gccause:显示关于垃圾收集统计信息的摘要(与-gcutil相同),以及最近和当前垃圾回收的原因。
  • -gcnew:显示新生代的垃圾回收统计信息。
  • -gcnewcapacity:显示新生代的大小及其对应的空间的统计信息。
  • -gcold: 显示老年代和元空间的垃圾回收统计信息。
  • -gcoldcapacity:显示老年代的大小统计信息。
  • -gcmetacapacity:显示元空间的大小的统计信息。
  • -printcompilation:显示即时编译方法的统计信息。

jstat命令的显示输出被格式化为一个表,列用空格分隔。接下来,我来了解一下每条输出选项的列名。

-class选项

  • Loaded:加载的类的数量。
  • Bytes:加载的类所占用的字节数。
  • Unloaded:卸载的类的数量。
  • Bytes:卸载的类所占用的字节数。
  • Time:执行类加载和卸载操作所花费的时间。

举个例子:

-compiler选项

  • Compiled:执行的编译任务的数量。
  • Failed:执行编译任务失败的数量。
  • Invalid:执行编译任务失效的数量。
  • Time:执行编译任务所花费的时间。
  • FailedType:上次编译失败的编译类型。
  • FailedMethod:上次编译失败的类名和方法。

举个例子:

-gc选项

  • S0C:年轻代中第一个Survivor区的容量,单位为KB。
  • S1C:年轻代中第二个Survivor区的容量,单位为KB。
  • S0U:年轻代中第一个Survivor区已使用大小,单位为KB。
  • S1U:年轻代中第二个Survivor区已使用大小,单位为KB。
  • EC:年轻代中Eden区的容量,单位为KB。
  • EU:年轻代中Eden区已使用大小,单位为KB。
  • OC:老年代的容量,单位为KB。
  • OU:老年代已使用大小,单位为KB。
  • MC:元空间的容量,单位为KB。
  • MU:元空间已使用大小,单位为KB。
  • CCSC:压缩类的容量,单位为KB。
  • CCSU:压缩类已使用大小,单位为KB。
  • YGC:Young GC的次数。
  • YGCT:Young GC所用的时间。
  • FGC:Full GC的次数。
  • FGCT:Full GC的所用的时间。
  • GCT:GC的所用的总时间。

举个例子:

-gccapacity选项

  • NGCMN:年轻代最小的容量,单位为KB。
  • NGCMX:年轻代最大的容量,单位为KB。
  • NGC:当前年轻代的容量,单位为KB。
  • S0C:年轻代中第一个Survivor区的容量,单位为KB。
  • S1C:年轻代中第二个Survivor区的容量,单位为KB。
  • EC:年轻代中Eden区的容量,单位为KB。
  • OGCMN:老年代最小的容量,单位为KB。
  • OGCMX:老年代最大的容量,单位为KB。
  • OGC:当前老年代的容量,单位为KB。
  • OC:当前老年代的容量,单位为KB。
  • MCMN:元空间最小的容量,单位为KB。
  • MCMX:元空间最大的容量,单位为KB。
  • MC:当前元空间的容量,单位为KB。
  • CCSMN:压缩类最小的容量,单位为KB。
  • CCSMX:压缩类最大的容量,单位为KB。
  • CCSC:当前压缩类的容量,单位为KB。
  • YGC:Young GC的次数。
  • FGC:Full GC的次数。

举个例子:

-gcutil选项

  • S0:年轻代中第一个Survivor区使用大小占当前容量的百分比。
  • S1:年轻代中第二个Survivor区使用大小占当前容量的百分比。
  • E:Eden区使用大小占当前容量的百分比。
  • O:老年代使用大小占当前容量的百分比。
  • M:元空间使用大小占当前容量的百分比。
  • CCS:压缩类使用大小占当前容量的百分比。
  • YGC:Young GC的次数。
  • YGCT:Young GC所用的时间。
  • FGC:Full GC的次数。
  • FGCT:Full GC的所用的时间。
  • GCT:GC的所用的总时间。

举个例子:

-gccause选项

  • S0:年轻代中第一个Survivor区使用大小占当前容量的百分比。
  • S1:年轻代中第二个Survivor区使用大小占当前容量的百分比。
  • E:Eden区使用大小占当前容量的百分比。
  • O:老年代使用大小占当前容量的百分比。
  • M:元空间使用大小占当前容量的百分比。
  • CCS:压缩类使用大小占当前容量的百分比。
  • YGC:Young GC的次数。
  • YGCT:Young GC所用的时间。
  • FGC:Full GC的次数。
  • FGCT:Full GC的所用的时间。
  • GCT:GC的所用的总时间。
  • LGCC:上次垃圾回收的原因。
  • GCC:当前垃圾回收的原因。

举个例子:

-gcnew选项

  • S0C:年轻代中第一个Survivor区的容量,单位为KB。
  • S1C:年轻代中第二个Survivor区的容量,单位为KB。
  • S0U:年轻代中第一个Survivor区已使用大小,单位为KB。
  • S1U:年轻代中第二个Survivor区已使用大小,单位为KB。
  • TT:对象在年轻代存活的次数。
  • MTT:对象在年轻代存活的最大次数
  • DSS:期望的Survivor区大小,单位为KB。
  • EC:年轻代中Eden区的容量,单位为KB。
  • EU:年轻代中Eden区已使用大小,单位为KB。
  • YGC:Young GC的次数。
  • YGCT:Young GC所用的时间。

举个例子:

-gcnewcapacity选项

  • NGCMN:年轻代最小的容量,单位为KB。
  • NGCMX:年轻代最大的容量,单位为KB。
  • NGC:当前年轻代的容量,单位为KB。
  • S0CMX:年轻代中第一个Survivor区最大的容量,单位为KB。
  • S0C:年轻代中第一个Survivor区的容量,单位为KB。
  • S1CMX:年轻代中第二个Survivor区最大的容量,单位为KB。
  • S1C:年轻代中第二个Survivor区的容量,单位为KB。
  • ECMX:年轻代中Eden区最大的容量,单位为KB。
  • EC:年轻代中Eden区的容量,单位为KB。
  • YGC:Young GC的次数。
  • FGC:Full GC的次数。

举个例子:

-gcold选项

  • MC:元空间的容量,单位为KB。
  • MU:元空间已使用大小,单位为KB。
  • CCSC:压缩类的容量,单位为KB。
  • CCSU:压缩类已使用大小,单位为KB。
  • OC:老年代的容量,单位为KB。
  • OU:老年代已使用大小,单位为KB。
  • YGC:Young GC的次数。
  • FGC:Full GC的次数。
  • FGCT:Full GC的所用的时间。
  • GCT:GC的所用的总时间。

举个例子:

-gcoldcapacity选项

  • OGCMN:老年代最小的容量,单位为KB。
  • OGCMX:老年代最大的容量,单位为KB。
  • OGC:当前老年代的容量,单位为KB。
  • OC:当前老年代的容量,单位为KB。
  • YGC:Young GC的次数。
  • FGC:Full GC的次数。
  • FGCT:Full GC的所用的时间。
  • GCT:GC的所用的总时间。

举个例子:

-gcmetacapacity选项

  • MCMN:元空间最小的容量,单位为KB。
  • MCMX:元空间最大的容量,单位为KB。
  • MC:当前元空间的容量,单位为KB。
  • CCSMN:压缩类最小的容量,单位为KB。
  • CCSMX:压缩类最大的容量,单位为KB。
  • YGC:Young GC的次数。
  • FGC:Full GC的次数。
  • FGCT:Full GC的所用的时间。
  • GCT:GC的所用的总时间。

举个例子:

-printcompilation选项

Compiled:最近编译方法执行的编译任务的数量。

Size:最近编译方法的字节码的字节数。

Type:最近编译方法的编译类型。

Method:最近编译方法的类名和方法名。

举个例子:

附实例使用:统计gc信息

各列意义

S0C:年轻代中第一个存活区的大小

S1C:年轻代中第二个存活区的大小

S0U:年轻代中第一个存活区已使用的空间 (字节)

S1U:年轻代中第二个存活区已使用的空间 (字节)

EC:   Edem区大小

EU:   年轻代中Edem区已使用的空间 (字节)

OC:  老年代大小

OU:  老年代已使用的空间 (字节)

PC:   持久代大小

PU: 持久代已使用的空间 (字节)

YGC: 从应用程序启动到采样时young gc的次数

YGCT: 从应用程序启动到采样时young gc的所用的时间(s)

FGC:  从应用程序启动到采样时full gc的次数

FGCT: 从应用程序启动到采样时full gc的所用的时间

GCT: 从应用程序启动到采样时整个gc所用的时间

如果young gc所用的时间比较长,如几秒几十秒,则肯定不正常。

# jstat -gcutil 25444

S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
 11.63   0.00   56.46  66.92  98.49 162    0.248    6      0.331    0.579

总结

到此这篇关于Java中jstat命令使用的文章就介绍到这了,更多相关Java jstat命令使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JDK常用命令jps jinfo jstat的具体说明与示例

    概述 JDK的bin目录下提供了很多命令工具,比如java.exe,javap.exe,javac.exe......这些命令由jdk/lib/tools.jar类库中提供的,是对tools.jar中的类的封装.我们主要介绍一下JVM中处理运行日志.异常堆栈.GC日志.线程快照(threaddump / javacore文件).堆转储快照(heapdump/hprof文件)等信息的相关常用命令(jhat就不再介绍了,用的比较少,目前都是用jmap+MAT分别进行生产heapdump文件的生成及分

  • Java中jstat命令的使用详解

    目录 jstat命令简介 jstat命令参数 输出选项 -class选项 -compiler选项 -gc选项 -gccapacity选项 -gcutil选项 -gccause选项 -gcnew选项 -gcnewcapacity选项 -gcold选项 -gcoldcapacity选项 -gcmetacapacity选项 -printcompilation选项 附实例使用:统计gc信息 总结 jstat命令简介 jstat(Java Virtual Machine Statistics Monito

  • java 中enum的使用方法详解

    java 中enum的使用方法详解 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 public interface IConstants { String MON = "Mon"; String TUE = "Tue"; String WED = "Wed"; String THU = "Thu

  • Java的jstack命令使用示例详解

    目录 jstack命令简介 jstack命令参数 -F参数 -l参数 -m参数 -h 和 -help 结尾 jstack命令简介 jstack(Java Virtual Machine Stack Trace)是JDK提供的一个可以生成Java虚拟机当前时刻的线程快照信息的命令行工具.线程快照一般被称为threaddump或者javacore文件,是当前Java虚拟机中每个线程正在执行的Java线程.虚拟机内部线程和可选的本地方法堆栈帧的集合.对于每个方法栈帧,将会显示完整的类名.方法名.字节码

  • Java 中This用法的实例详解

     Java 中This用法的实例详解 用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法. 那们类里面是够也应该有一个引用来访问自己的属性和方法纳? 呵呵,Java提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法.先来个简单的例子: public class ThisDemo { String name="Mick"; public void print(String name){ System.out.pr

  • Java中正则表达式的使用和详解(下)

    在上篇给大家介绍了Java中正则表达式的使用和详解(上),具体内容如下所示: 1.常用正则表达式 规则 正则表达式语法   一个或多个汉字 ^[\u0391-\uFFE5]+$  邮政编码 ^[1-9]\d{5}$ QQ号码 ^[1-9]\d{4,10}$  邮箱 ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$  用户名(字母开头 + 数字/字母/下划线) ^[A-Za-z][A-Za-z1-9_-]+$ 手

  • java 中自定义OutputFormat的实例详解

    java 中 自定义OutputFormat的实例详解 实例代码: package com.ccse.hadoop.outputformat; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apa

  • java中的interface接口实例详解

     java中的interface接口实例详解 接口:Java接口是一些方法表征的集合,但是却不会在接口里实现具体的方法. java接口的特点如下: 1.java接口不能被实例化 2.java接口中声明的成员自动被设置为public,所以不存在private成员 3.java接口中不能出现方法的具体实现. 4.实现某个接口就必须要实现里面定义的所有方法. 接下来看一个实现接口的案例: package hello;   interface competer{ //定义接口 void set_comp

  • java中Spring Security的实例详解

    java中Spring Security的实例详解 spring security是一个多方面的安全认证框架,提供了基于JavaEE规范的完整的安全认证解决方案.并且可以很好与目前主流的认证框架(如CAS,中央授权系统)集成.使用spring security的初衷是解决不同用户登录不同应用程序的权限问题,说到权限包括两部分:认证和授权.认证是告诉系统你是谁,授权是指知道你是谁后是否有权限访问系统(授权后一般会在服务端创建一个token,之后用这个token进行后续行为的交互). spring

  • Java中正则表达式的使用和详解(上)

    1.匹配验证-验证Email是否正确 public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.net"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}"; // 编译正则表达式 Pattern pattern = Pa

  • Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别?    总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上编译成class文件,而javascript则直接在浏览器上加载运行. 2.由第一点可看出,java代码需要编译,而javascript不需要编译. 3.从语言性质来说,java是一种高级编程语言,对变量检查要求严格,javascript只是一个简单的解释性的脚本语言,对变量检查及要求很弱.

随机推荐