-
[JVM工具(1)] 堆栈检查利器jstat的使用
jstat
-
可以检查
JVM
整体的运行情况,可以看到 新生代,老年代等的内存使用情况,以及GC
次数和耗时 -
命令格式 如
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
-
其中
-option
必选参数表示命令参数 如gc
等,-t
为可选参数表示是否打印时间(秒),-h<lines>
可选参数,表示每隔多少行打印头部列表,如设置-h 5
, 那么每五条记录就会重新打印表头,vmid
必选参数,Java
进程id
,interval
可选参数表示采样的时间间隔,count
可选参数表示需要采样多少条,
jstat -gc pid
-
jstat -gc pid
这是最常用的语法,可以直接查看内存和垃圾回收情况 -
首先我们要获得
Java
进程的PID
信息,可以通过jps
命令来获取 -
之后执行
jstat -gc pid
即可看到对应Java
进程的内存情况,如下:
-
这里说明一下关于这些列名的含义:
-
S0C
: 新生代中第一个Survivor
(即From
区)的容量大小 (千字节) -
S1C
: 新生代中第二个Survivor
(即To
区)的容量大小 (千字节) -
S0U
: 新生代From Survivor
区已使用内存大小(千字节) -
S1U
: 新生代To Survivor
区一使用内存大小(千字节) -
EC
: 新生代Eden
区的容量大小(千字节) -
EU
: 新生代Eden
区已使用内存大小(千字节) -
OC
: 老年代空间容量大小(千字节) -
OU
: 老年代已使用内存大小(千字节) -
MC
: 方法区的空间大小 (千字节) -
MU
: 方法区已使用的空间大小(千字节) -
YGC
: 从系统启动到现在Young GC/Minor GC
的次数 -
YGCT
:Young GC
总耗时(秒) -
FGC
:从系统启动到现在Full GC
的次数 -
FGCT
:Full GC
的总耗时(秒) -
GCT
: 垃圾回收总的耗时(秒) -
NGCMN
:年轻代(young
)中初始化(最小)的大小 (千字节) -
NGCMX
:年轻代(young
)的最大容量 (千字节) -
GC
:年轻代(young
)中当前的容量 (千字节) -
OGCMN
:old
代中初始化(最小)的大小 (千字节) -
OGCMX
:old
代的最大容量 (千字节) -
OGC
:old
代当前新生成的容量 (千字节) -
PGCMN
:perm
代中初始化(最小)的大小 (千字节) -
PGCMX
:perm
代的最大容量 (千字节) -
PGC
:perm
代当前新生成的容量 (千字节) -
S0
:年轻代中From survivor
(幸存区)已使用的占当前容量百分比 -
S1
:年轻代中To Survivor
(幸存区)已使用的占当前容量百分比 -
E
:年轻代中Eden
(伊甸园)已使用的占当前容量百分比 -
O
:old
代已使用的占当前容量百分比 -
P
:perm
代已使用的占当前容量百分比 -
S0CMX
:年轻代中From survivor
(幸存区)的最大容量 (千字节) -
S1CMX
:年轻代中To Survivor
(幸存区)的最大容量 (千字节) -
ECMX
:年轻代中Eden
(伊甸园)的最大容量 (千字节) -
DSS
:当前需要survivor
(幸存区)的容量 (千字节)(Eden
区已满) -
TT
: 持有次数限制 -
MTT
: 最大持有次数限制
-
jstat -gcutil PID
-
一般我们还可以通过
jstat -gcutil pid
来获取分代年龄的使用情况,显示为占比,如下,表头参考上面
jstat -gccapacity PID
-
-gccapacity
命令主要用来分析堆内存,用法参考上面,如下效果,表头含义参看上面
其他一些命令参数
-
jstat -gcnew PID
: 年轻代GC
分析,其中TT
和MTT
可以看到对象在年龄代存活的年龄和存活的最大年龄
-
jstat -gcnewcapacity PID
: 年轻代内存分析
-
jstat -gcold PID
: 老年代GC
分析
-
jstat -gcoldcapacity
: 老年代内存分析
-
jstat -gcmetacapacity PID
: 元数据内存分析
jstat -class PID
- 统计进程中加载的类的数量,如下:
- 说明:
Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间
jstat -compiler PID
-
编译信息的统计命令, 如下命令
jstat -class 15372
- 说明:
Compiled:编译数量。
Failed:失败数量
Invalid:不可用数量
Time:时间
FailedType:失败类型
FailedMethod:失败的方法
jstat -printcompilation PID
-
JVM
编译方法的统计,如下命令jstat -printcompilation 15372
- 说明:
Compiled:最近编译方法的数量
Size:最近编译方法的字节码数量
Type:最近编译方法的编译类型。
Method:方法名标识。
好了今天就说到这里,
jstat
死一个非常还用的工具,需要平时多使用多分析才能真真掌握,下次我们接着说相关的工具的使用~
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程