摘要:jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。

本文分享自华为云社区《JVM之通过jstat命令进行查看堆内存使用情况》,作者:共饮一杯无 。

基本概念

jstat是JDK自带的一个轻量级小工具。它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:

jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

C:\Users\zjq>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.

说明:

  • option:参数选项
  • -t:可以在打印的列加上Timestamp列,用于显示系统运行的时间
  • -h:可以在周期性数据输出的时候,指定输出多少行以后输出一次表头
  • vmid:Virtual Machine ID( 进程的 pid)
  • interval:执行每次的间隔时间,单位为毫秒
  • count:用于指定输出多少次记录,缺省则会一直打印

option 可以从下面参数中选择
jstat -options

  • -class 用于查看类加载情况的统计
  • -compiler 用于查看HotSpot中即时编译器编译情况的统计
  • -gc 用于查看JVM中堆的垃圾收集情况的统计
  • -gccapacity 用于查看新生代、老生代及持久代的存储容量情况
  • -gcmetacapacity 显示metaspace的大小
  • -gcnew 用于查看新生代垃圾收集的情况
  • -gcnewcapacity 用于查看新生代存储容量的情况
  • -gcold 用于查看老生代及持久代垃圾收集的情况
  • -gcoldcapacity 用于查看老生代的容量
  • -gcutil 显示垃圾收集信息
  • -gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因
  • -printcompilation 输出JIT编译的方法信息

案例

-class 查看class加载统计

C:\Users\zjq>jps
24832 Jps
21180 Bootstrap
C:\Users\zjq>jstat -class 21180
Loaded Bytes Unloaded Bytes Time
3800 7339.7 409 783.0 6.35

说明:

  • Loaded:加载class的数量
  • Bytes:所占用空间大小
  • Unloaded:未加载数量
  • Bytes:未加载占用空间
  • Time:时间

-compiler 查看编译统计

C:\Users\zjq>jstat -compiler 21180
Compiled Failed Invalid Time FailedType FailedMethod
2743 0 0 10.53 0

说明:

  • Compiled:编译数量。
  • Failed:失败数量
  • Invalid:不可用数量
  • Time:时间
  • FailedType:失败类型
  • FailedMethod:失败的方法

-gc 垃圾回收统计

C:\Users\zjq>jstat -gc 21180
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
28160.0 30208.0 0.0 0.0 260096.0 163920.6 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
#也可以指定打印的间隔和次数,每1秒中打印一次,共打印5次
C:\Users\zjq>jstat -gc 21180 1000 3
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
28160.0 30208.0 0.0 0.0 260096.0 171724.8 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
28160.0 30208.0 0.0 0.0 260096.0 172592.0 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
28160.0 30208.0 0.0 0.0 260096.0 172592.0 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153

说明:

  • S0C:第一个Survivor区的大小(KB)
  • S1C:第二个Survivor区的大小(KB)
  • S0U:第一个Survivor区的使用大小(KB)
  • S1U:第二个Survivor区的使用大小(KB)
  • EC:Eden区的大小(KB)
  • EU:Eden区的使用大小(KB)
  • OC:Old 区大小(KB)
  • OU:Old使用大小(KB)
  • MC:方法区大小(KB)
  • MU:方法区使用大小(KB)
  • CCSC:压缩类空间大小(KB)
  • CCSU:压缩类空间使用大小(KB)
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

-gccapacity 堆内存统计

[root@zjq ~]# jstat -gccapacity 3346 #用于查看新生代、老生代及持久代的存储容量情况
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
[root@zjq ~]# jstat -gccapacity -h5 3346 1000 #-h5:每5行显示一次表头 1000:每1秒钟显示一次,单位为毫秒
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
  • NGCMN:年轻代(young)中初始化(最小)的大小(字节)
  • NGCMX:年轻代(young)的最大容量 (字节)
  • NGC:年轻代(young)中当前的容量 (字节)
  • S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
  • EC:年轻代中Eden(伊甸园)的容量 (字节)
  • OGCMN:old代中初始化(最小)的大小 (字节)
  • OGCMX:old代的最大容量(字节)
  • OGC:old代当前新生成的容量 (字节)
  • OC:Old代的容量 (字节)
  • MCMN:metaspace(元空间)中初始化(最小)的大小 (字节)
  • MCMX:metaspace(元空间)的最大容量 (字节)
  • MC:metaspace(元空间)当前新生成的容量 (字节)
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • FGC:从应用程序启动到采样时old代(全gc)gc次数

-gcmetacapacity 元数据空间统计

[root@zjq ~]# jstat -gcmetacapacity 3346 #显示元数据空间的大小
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT:从应用程序启动到采样时gc用的总时间(s)

-gcnew 新生代垃圾回收统计

[root@zjq ~]# jstat -gcnew 3346 #用于查看新生代垃圾收集的情况
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020
  • S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
  • S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  • S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  • TT:持有次数限制
  • MTT:最大持有次数限制
  • DSS:期望的幸存区大小
  • EC:年轻代中Eden(伊甸园)的容量 (字节)
  • EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

-gcnewcapacity 新生代内存统计

[root@zjq ~]# jstat -gcnewcapacity 3346 #用于查看新生代存储容量的情况
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
  • NGCMN:年轻代(young)中初始化(最小)的大小(字节)
  • NGCMX:年轻代(young)的最大容量 (字节)
  • NGC:年轻代(young)中当前的容量 (字节)
  • S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
  • S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1CMX:年轻代中第二个survivor(幸存区)的最大容量 (字节)
  • S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
  • ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
  • EC:年轻代中Eden(伊甸园)的容量 (字节)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • FGC:从应用程序启动到采样时old代(全gc)gc次数

-gcold 老年代垃圾回收统计

[root@zjq~]# jstat -gcold 3346 #用于查看老年代及持久代垃圾收集的情况
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020
  • MC:metaspace(元空间)的容量 (字节)
  • MU:metaspace(元空间)目前已使用空间 (字节)
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • OC:Old代的容量 (字节)
  • OU:Old代目前已使用空间 (字节)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT:从应用程序启动到采样时gc用的总时间(s)

-gcoldcapacity 老年代内存统计

[root@zjq~]# jstat -gcoldcapacity 3346 #用于查看老年代的容量
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
  • OGCMN:old代中初始化(最小)的大小 (字节)
  • OGCMX:old代的最大容量(字节)
  • OGC:old代当前新生成的容量 (字节)
  • OC:Old代的容量 (字节)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT:从应用程序启动到采样时gc用的总时间(s)

-gcutil 垃圾回收统计

[root@zjq~]# jstat -gcutil 3346 #显示垃圾收集信息
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020
  • S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
  • S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
  • E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
  • O:old代已使用的占当前容量百分比
  • M:元数据区已使用的占当前容量百分比
  • CCS:压缩类空间已使用的占当前容量百分比
  • YGC :从应用程序启动到采样时年轻代中gc次数
  • YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC :从应用程序启动到采样时old代(全gc)gc次数
  • FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT:从应用程序启动到采样时gc用的总时间(s)

-gccause 显示垃圾回收的相关信息

[root@zjq~]# jstat -gccause 3346 #显示垃圾回收的相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
  • LGCC:最后一次GC原因
  • GCC:当前GC原因(No GC 为当前没有执行GC)

-printcompilation JVM编译方法统计

[root@zjq ~]# jstat -printcompilation 3346 #输出JIT编译的方法信息
Compiled Size Type Method
421 60 1 sun/nio/ch/Util$2 clear
  • Compiled:编译任务的数目
  • Size:方法生成的字节码的大小
  • Type:编译类型
  • Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的

点击关注,第一时间了解华为云新鲜技术~

如何通过jstat命令进行查看堆内存使用情况?的更多相关文章

  1. 如何查看redis内存使用情况

    https://jingyan.baidu.com/article/2c8c281dbd079f0008252a0f.html Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以 ...

  2. 查看TOMCAT内存使用情况 以及修改方法

    查看TOMCAT内存使用情况 <% double total = (Runtime.getRuntime().totalMemory()) / (1024.0 * 1024); double m ...

  3. Tomcat中查看JVM内存使用情况

    TOMCAT运行时,实时监控当前应用JVM的使用情况:可以利用Tomcat自带的应用manager查看详情. 首先,确认服务目录webapps下有manager应用 其次,需要创建角色manager和 ...

  4. 【转载】 使用宝塔Linux面板功能查看服务器内存使用情况

    运维过阿里云服务器或者腾讯云服务器的运维人员都知道,针对占用内存比较高的应用或者服务等,我们需要时刻关注服务器的内存使用率,是否存在内存瓶颈等情况的出现.阿里云和腾讯云官方后台界面的监控数据页面也有相 ...

  5. 【GC概述以及查看堆内存使用】Java内存管理和GC学习

    内存划分 1.JAVA内存主要划分为方法栈.方法区.堆. 2.方法栈上内存会自动释放: 3.方法区上主要加载了类的元信息.静态变量.常量.改区域又称为持久代(Perm Gen),默认是最小16M,最大 ...

  6. jmap -heap 查看堆内存

    概述 用jmap -heap命令可以查看linux堆内存分布 具体用法 1:先查出tomcat的进程号 例如: 然后执行 jmap -heap 7095 可以打印出整体的堆信息   可以看到经过分配的 ...

  7. 查看Centos内存使用情况linux命令

    我们在使用centos版linux服务器的过程中,有时会出现卡顿的情况,这时我们可以通过查看一下内存的使用来判断发生了什么情况,那么如何查看centos内容使用情况呢?有几个方法可以尝试,跟着ytka ...

  8. Linux 系统管理命令 - free - 查看系统内存信息

    命令详解 重要星级: ★★★★★ 功能说明: free 命令用于显示系统内存状态,具体包括系统物理内存.虚拟内存.共享内存和系统缓存等. 语法格式: free [option] free [选项] 说 ...

  9. linux 下查看系统内存使用情况的方法

    在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在linux系统如何查看内存使用情况呢?下面和大家分享在Linux 下查看内存使用情况的free命令: [root@scs ...

  10. linux下查看进程内存使用情况

    1. top命令--动态查看一个进程的内存使用top -d 1 -p pid [,pid ...]  //设置为delay 1s,默认是delay 3s  如果想根据内存使用量进行排序,可以shift ...

随机推荐

  1. 自然数的拆分问题(lgP2404)

    dfs.又调了一个小时,窝果然菜 需要传递的变量分别为目前搜索的数字:目前所有选中数字的和:目前所选数字个数. 见注释. #include<bits/stdc++.h> using nam ...

  2. YXの每日挂分记录

    7.11 T1 不开两倍数组 100->60. 7.18 T2 dp+矩乘 转移不判边界 100->10. 7.20 T2 人类智慧 1e6 n log n 100->10,求前 5 ...

  3. 使用 Java 对比两个PDF文档之间的差异

    不论是在团队写作还是在个人工作中,PDF 文档往往会经过多次修订和更新.掌握 PDF 文档内容的变化对于管理文档有极大的帮助.通过对比 PDF 文档,用户可以快速找出文档增加.删除和修改的内容,更好地 ...

  4. MVVM前后端分离:web接口规范

    大前端前提下,开发采用前后端分离的方式,前端和后端主要通过接口进行分离, 后端开发接口,前端使用接口,前后端接口开发告一段落以后,接口联调差不多就进入开发尾声,准备送测了. 那么,对接口的约束和规范就 ...

  5. .Net Core 3.1升级 .Net 5后出现代码错误 rzc generate exited with code 1.

    安装.Net 5后出现错误,错误定位到了CodeGeneration相关的文件,找了半天也不知道哪里的问题. 升级类库,清理解决方案,删除obj.bin文件夹什么的卵用没有. 最后发现升级.Net 5 ...

  6. Nebula Graph开源分布式图数据库,万亿级数据,毫秒级延时

    推荐一个分布式图数据库Nebula Graph,万亿级数据,毫秒级延时 什么是Nebula Graph Nebula Graph 是一款开源的.分布式的.易扩展的原生图数据库,能够承载包含数千亿个点和 ...

  7. 神经网络入门篇:详解向量化实现的解释(Justification for vectorized implementation)

    向量化实现的解释 先对几个样本计算一下前向传播,看看有什么规律: 公式1.16: \(z^{[1](1)} = W^{[1]}x^{(1)} + b^{[1]}\) \(z^{[1](2)} = W^ ...

  8. 老知识复盘-SQL从提交到执行到底经历了什么

    一.什么是SQL sql(Structured Query Language: 结构化查询语言)是高级的费过程化编程语言,允许用户在高层数据结构上工作, 是一种数据查询和程序设计语言, 也是(ANSI ...

  9. java把数据批量插入iotdb

    package com.xlkh.kafka; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson ...

  10. LOG日志系统

    # coding=utf-8 import datetime import logging import os import sys from logging.handlers import Time ...