如何通过jstat命令进行查看堆内存使用情况?
摘要: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命令进行查看堆内存使用情况?的更多相关文章
- 如何查看redis内存使用情况
https://jingyan.baidu.com/article/2c8c281dbd079f0008252a0f.html Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以 ...
- 查看TOMCAT内存使用情况 以及修改方法
查看TOMCAT内存使用情况 <% double total = (Runtime.getRuntime().totalMemory()) / (1024.0 * 1024); double m ...
- Tomcat中查看JVM内存使用情况
TOMCAT运行时,实时监控当前应用JVM的使用情况:可以利用Tomcat自带的应用manager查看详情. 首先,确认服务目录webapps下有manager应用 其次,需要创建角色manager和 ...
- 【转载】 使用宝塔Linux面板功能查看服务器内存使用情况
运维过阿里云服务器或者腾讯云服务器的运维人员都知道,针对占用内存比较高的应用或者服务等,我们需要时刻关注服务器的内存使用率,是否存在内存瓶颈等情况的出现.阿里云和腾讯云官方后台界面的监控数据页面也有相 ...
- 【GC概述以及查看堆内存使用】Java内存管理和GC学习
内存划分 1.JAVA内存主要划分为方法栈.方法区.堆. 2.方法栈上内存会自动释放: 3.方法区上主要加载了类的元信息.静态变量.常量.改区域又称为持久代(Perm Gen),默认是最小16M,最大 ...
- jmap -heap 查看堆内存
概述 用jmap -heap命令可以查看linux堆内存分布 具体用法 1:先查出tomcat的进程号 例如: 然后执行 jmap -heap 7095 可以打印出整体的堆信息 可以看到经过分配的 ...
- 查看Centos内存使用情况linux命令
我们在使用centos版linux服务器的过程中,有时会出现卡顿的情况,这时我们可以通过查看一下内存的使用来判断发生了什么情况,那么如何查看centos内容使用情况呢?有几个方法可以尝试,跟着ytka ...
- Linux 系统管理命令 - free - 查看系统内存信息
命令详解 重要星级: ★★★★★ 功能说明: free 命令用于显示系统内存状态,具体包括系统物理内存.虚拟内存.共享内存和系统缓存等. 语法格式: free [option] free [选项] 说 ...
- linux 下查看系统内存使用情况的方法
在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在linux系统如何查看内存使用情况呢?下面和大家分享在Linux 下查看内存使用情况的free命令: [root@scs ...
- linux下查看进程内存使用情况
1. top命令--动态查看一个进程的内存使用top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift ...
随机推荐
- 轻巧的批量图片压缩工具imgfast
现在的手机拍照动辄2M3M,还有7M8m的,如果要把这些文件上传到网上应用,浪费网络,占用资源 所以2022年中秋写了这个小工具,可以批量进行图片文件压缩,支持jpg和png. 文件下载链接https ...
- Substring of Sorted String 题解
Substring of Sorted String 写篇题解纪念一下蒟蒻第一次赛时切出的 F 题. 题目简述 对一个字符串进行单点修改,区间判断操作. 修改操作为将一个字符修改为另一个,判断操作为判 ...
- Vue源码学习(十二):列队处理(防抖优化,多次调用,只处理一次)
好家伙, 本篇讲的是数据更新请求列队处理 1.一些性能问题 数据更新的核心方法是watcher.updata方法 实际上也就是vm._updata()方法, vm._updata()方法中的patch ...
- Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法
Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,此处测试代码如下,这里使用add方法: 1 public class main { 2 public static vo ...
- linux 批量替换文件内容
1.批量查找某个目下文件的包含的内容,例如: # grep -rn "要找查找的文本" ./ 2.批量查找并替换文件内容. # sed -i "s/要找查找的文本 ...
- Windows 95 的辉煌诞生历史
1992 年 2 月,Windows 3.1 的研发即将结束,而 Windows 团队正忙得不亦乐乎地计划他们的下一盘大棋.到了 3 月 5 日,他们终于悠哉悠哉地敲定了战略大计:横扫桌面.笔记本.移 ...
- Chromium Command Buffer原理解析
Command Buffer 是支撑 Chromium 多进程硬件加速渲染的核心技术之一.它基于 OpenGLES2.0 定义了一套序列化协议,这套协议规定了所有 OpenGLES2.0 命令的序列化 ...
- 产品代码都给你看了,可别再说不会DDD(十):CQRS
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- 如何赋予 GPT/LLM 自我意识1
引子 这个周末OpenAI搞了一个大新闻,围绕 Sam Altman 和 Ilya Sutskever 的各种讨论遍地开花,而其中一个关注点就是他们对于 AGI 降临态度上的偏差.本文不打算讨论公司治 ...
- 为什么MySQL不建议使用delete删除数据?
MySQL并不直接建议禁止使用DELETE语句删除数据,但是在某些情况下,使用DELETE可能会带来一些潜在的问题,特别是在大型数据库中. 下面我将详细介绍为什么在某些情况下MySQL不建议过度使用D ...