JVM 工具-jstat:虚拟机统计信息监控工具

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

jstat(JVM Statistics Monitorning Tool)

用于监控虚拟机各种运行状态信息的命令行工具。

它可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,它是运行期定位虚拟机性能问题的首选工具。

语法:

    [root@localhost ~]# jstat -help
    Usage: jstat -help|-options
           jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
    
    Definitions:
      <option>      An option reported by the -options option
      <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                         <lvmid>[@<hostname>[:<port>]]
                    Where <lvmid> is the local vm identifier for the target
                    Java virtual machine, typically a process id; <hostname> is
                    the name of the host running the target Java virtual machine;
                    and <port> is the port number for the rmiregistry on the
                    target host. See the jvmstat documentation for a more complete
                    description of the Virtual Machine Identifier.
      <lines>       Number of samples between header lines.
      <interval>    Sampling interval. The following forms are allowed:
                        <n>["ms"|"s"]
                    Where <n> is an integer and the suffix specifies the units as 
                    milliseconds("ms") or seconds("s"). The default units are "ms".
      <count>       Number of samples to take before terminating.
      -J<flag>      Pass <flag> directly to the runtime system.

参数 interval 和 count 代表查询间隔和次数,如果省略这两个参数,说明只查询一次。建设需要每250毫秒查询一次进程2764垃圾收集的情况,一共查询20次,那么命令应该是: jstat -gc 2764 250 20

主要选项

选项作用
-class监视类装载、卸载数量、中空间及类装载所耗费的时间
-gc监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等容量、已用空间、GC合计时间等信息
-gccapacity监视内容与-gc基本相同,但输出主要关注java堆各区域使用到的最大和最小空间
-gcutil监控内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew监视新生代GC的状况
-gcnewcapacity监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold监视老年代GC的状况
-gcoldcapacity监视内容与-gcold基本相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity输出永久代使用到的最大和最小空间
-compiler输出JIT编译器编译过的方法、耗时等信息
-printcompilation输出已被JIT编译的方法

统计加载类的信息

**命令:**jstat -class

    [root@test1117 ~]# jstat -class 21434
    Loaded  Bytes  Unloaded  Bytes     Time   
      8776 18268.0        0     0.0       6.05
列名说明
Loaded装载的类的数量
Bytes装载类所占用的字节数
Unloaded卸载类的数量
Bytes卸载类所占用的字节数
Time装载类和卸载类所耗费的时间(毫秒)

编译统计

**命令:**jstat -compiler

    [root@test1117 ~]# jstat -compiler 21434
    Compiled Failed Invalid   Time   FailedType FailedMethod
        1721      1       0    34.87          1 org/apache/catalina/loader/WebappClassLoaderBase findResourceInternal
列名说明
Compiled编译任务执行数量
Failed编译任务执行失败的数量
Invalid编译任务失效的数量
Time编译总耗时(毫秒)
FailedType最后一个编译失败任务的类型
FailedMethod最后一个编译失败任务所在的类及方法

垃圾回收统计

**命令:**jstat -gc

    [root@test1117 ~]# jstat -gc 21434
     S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
    13312.0 13824.0  0.0   1040.0 146432.0 140089.9  349696.0   252384.5  262144.0 55374.3     47    0.921   0      0.000    0.921
列名说明
S0C年轻代中第一个survior(幸存区)的容量(kb)
S1C年轻代中第二个survior(幸存区)的容量(kb)
S0U年轻代中第一个survior(幸存区)目前已使用的容量(kb)
S1U年轻代中第二个survior(幸存区)目前已使用的容量(kb)
ECeden区的容量(kb)
EUeden区目前已使用的容量(kb)
OC老年代的容量(kb)
OU老年代目前已使用的容量(kb)
PCperm永久代的容量(kb)
PUperm永久代目前已使用的容量(kb)
YGC从应用程序启动到采集时年轻代中gc次数
YGCT从应用程序启动到采集时年轻代中gc所用时间(秒)
FGC从应用程序启动到采集时老年代中gc次数
FGCT从应用程序启动到采集时老年代gc所用的时间(秒)
GCT从应用程序启动到采集时gc所用的总时间(秒)

统计gc信息

**命令:**jstat -gcutil

    [root@test1117 ~]# jstat -gcutil 21434
      S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      7.81   0.00  46.68  72.18  21.12     48    0.934     0    0.000    0.934
列名说明
S0年轻代中第一个(survisor)幸存区已使用的容量占比
S1年轻代中第二个(survisor)幸存区已使用的容量占比
E伊旬园(eden)区已使用的容量占比
O老年代区已使用的容量占比
P永久代(perm)已使用的容量占比
YGC年轻代到目前gc次数
YGCT年轻代到目前gc耗费的总时间(秒)
FGC老年代目前gc次数
FGCT老年代目前gc耗费的总时间(秒)
GC从应用程序到目前gc总耗时(秒)

堆内存统计

**命令:**jstat -gccapacity

    [root@test1117 ~]# jstat -gccapacity 21434
     NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC 
    175104.0 393216.0 175104.0 13312.0 12288.0 149504.0   349696.0   655360.0   349696.0   349696.0 262144.0 524288.0 262144.0 262144.0     48     0
列名说明
NGCMN年轻代(young)中初始化(最小)的大小(kb)
NGCMX年轻代(young)中初始化(最大)的大小(kb)
NGC年轻代(young)中当前的容量(kb)
S0C年轻代中第一个(survisor)幸存区的容量(kb)
S1C年轻代中第二个(survisor)幸存区的容量(kb)
EC年轻代中(Eden)伊旬园的容量(kb)
OGCMN老年代(old)中初始化(最小)的容量(kb)
OGCMX老年代(old)中初始化(最大)的容量(kb)
OGC当前老年代的大小(kb)
OC当前老年代的大小(kb)
PGCMN永久代(perm)中初始化(最小)的大小(kb)
PGCMX永久代(perm)中初始化(最大)的大小(kb)
PGC永久代当前的大小(kb)
PC永久代当前的大小(kb)
YGC从应用程序启动到采集时年轻代gc的次数
FGC从应用程序启动带采集时老年代gc的次数

新生代垃圾回收统计

**命令:**jstat -gcnew

    D:\code\IdeaProjects\javafx-demo1\src\test>jstat -gcnew 4016
     S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
    1024.0 1024.0    0.0    0.0 15  15  512.0   8192.0   7328.4    465    0.120
列名说明
S0C年轻代中第一个(survisor)幸存区的容量(kb)
S1C年轻代中第二个(survisor)幸存区的容量(kb)
S0U年轻代中第一个(survisor)幸存区目前已使用的容量(kb)
S1U年轻代中第二个(survisor)幸存区目前已使用的容量(kb)
TT对象在新生代中存活的次数
MTT对象在新生代中存活的最大次数
DSS当前需要survivor(幸存区)的容量(kb)
EC伊旬园(eden)区的大小(kb)
EU伊旬园(eden)区已使用的大小(kb)
YGC到目前年轻代gc的次数
YGCT到目前年轻代gc所耗费的时间(秒)

新生代内存统计

**命令:**jstat -gcnewcapacity

    D:\code\IdeaProjects\javafx-demo1\src\test>jstat -gcnewcapacity 4016
      NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
       10240.0    10240.0    10240.0   1024.0   1024.0   1024.0   1024.0     8192.0     8192.0   647     0
列名说明
MGCMN年轻代中初始化最小容量(kb)
MGCMX年轻代中初始化最大容量(kb)
NGC年轻代当前容量(kb)
S0CMX年轻代第一个幸存区(survisor)最大容量(kb)
S0C年轻代第一个幸存区(survisor)当前容量(kb)
S1CMX年轻代第二个幸存区(survisor)最大容量(kb)
S1C年轻代第二个幸存区(survisor)当前容量(kb)
ECMX年轻代伊旬园区(Eden)最大容量(kb)
EC年轻代伊旬园区(Eden)当前容量(kb)
YGC截止到目前年轻代gc次数
FGC截止到目前老年代gc次数

老年代垃圾回收统计

**命令:**jstat -gcold

    [root@test1117 ~]# jstat -gcold 21434
       PC       PU        OC          OU       YGC    FGC    FGCT     GCT   
    262144.0  55374.3    349696.0    252424.5     48     0    0.000    0.934
列名说明
PC永久区(perm)容量(kb)
PU永久区(perm)已使用容量(kb)
OC老年代容量(kb)
OU老年代已使用容量(kb)
YGC截止到目前年轻代gc次数
FGC截止到目前老年代gc次数
GCT截止到目前gc耗费的总时间(秒)

老年代内存统计

**命令:**jstat -gcoldcapacity

    [root@test1117 ~]# jstat -gcoldcapacity 21434
       OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT   
       349696.0    655360.0    349696.0    349696.0    48     0    0.000    0.934
列名说明
OGCMN老年代最小容量(kb)
OGCMX老年代最大容量(kb)
OGC老年代目前生成的容量(kb)
OC老年代目前容量(kb)
YGC截止到目前年轻代gc次数
FGC截止到目前老年代gc次数
FGCT截止到目前老年代gc耗费的总时间(秒)
GCT截止到目前gc耗费的总时间(秒)

永久代内存统计

**命令:**jstat -gcpermcapacity

    [root@test1117 ~]# jstat -gcpermcapacity 21434
      PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT   
      262144.0   524288.0   262144.0   262144.0    49     0    0.000    0.948
列名说明
PGCMN永久代最小容量(kb)
PGCMX永久代最大容量(kb)
PGC永久代当前生成的容量(kb)
PC永久代当前容量(kb)
YGC截止目前年轻代gc次数
FGC截止目前老年代gc次数
FGCT截止目前年轻代gc耗费的总时间(秒)
GCT截止目前老年代gc耗费的总时间(秒)

最近二次gc统计

**命令:**gstat -gccause

    [root@test1117 ~]# jstat -gccause 21434
      S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
      0.00   8.72  33.06  72.20  21.12     49    0.948     0    0.000    0.948 Allocation Failure   No GC
列名说明
LGCC最近垃圾回收的原因
GCC当前垃圾回收的原因

JVM编译方法统计

**命令:**jstat -printcompilation

    [root@test1117 ~]# jstat -printcompilation 21434
    Compiled  Size  Type Method
        1721    554    1 org/jboss/netty/channel/socket/nio/AbstractNioWorker write0
列名说明
Compiled最近编译方法的数量
Size最近编译方法的字节码数量
Type最近编译方法的编译类型
Method方法名标识
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值