Linux使用jstat命令查看jvm的GC情况

Linux使用jstat命令查看jvm的GC情况,第1张

Linux 使用jstat命令查看jvm的GC情况

命令格式

jstat命令命令格式:

jstat [Options] vmid[interval] [count]

参数说明:

Options,选项,我们一般使用 -gcutil 查看gc情况

vmid

,VM的进程号,即当前运行的java进程号

interval

,间隔时间,单位为秒或者毫秒

count

,打印次数,如果缺省则打印无数次

示例说明

示例

通常运行命令如下:

jstat -gc 12538 5000

即会每5秒一次显示进程号为12538的java进成的GC情况,

显示内容如下图:

结果说明

   S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1C

:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U

:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U

:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC

:年轻代中Eden(伊甸园)的容量 (字节)

EU

:年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC

:Old代的容量 (字节)

OU

:Old代目前已使用空间 (字节)

PC

:Perm(持久代)的容量 (字节)

PU

:Perm(持久代)目前已使用空间 (字节)

YGC

:从应用程序启动到采样时年轻代中gc次数

YGCT

:从应用程序启动到采样时年轻代中gc所用时间(s)

FGC

:从应用程序启动到采样时old代(全gc)gc次数

FGCT

:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

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

NGCMN

:年轻代(young)中初始化(最小)的大小 (字节)

NGCMX

:年轻代(young)的最大容量 (字节)

NGC

:年轻代(young)中当前的容量 (字节)

OGCMN

:old代中初始化(最小)的大小 (字节)

OGCMX

:old代的最大容量 (字节)

OGC

:old代当前新生成的容量 (字节)

PGCMN

:perm代中初始化(最小)的大小 (字节)

PGCMX

:perm代的最大容量 (字节)

PGC

:perm代当前新生成的容量 (字节)

S0

:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1

:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E

:年轻代中Eden(伊甸园)已使用的占当前容量百分比

O

:old代已使用的占当前容量百分比

P

:perm代已使用的占当前容量百分比

S0CMX

:年轻代中第一个survivor(幸存区)的最大容量 (字节)

S1CMX

:年轻代中第二个survivor(幸存区)的最大容量 (字节)

ECMX

:年轻代中Eden(伊甸园)的最大容量 (字节)

DSS

:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

TT

: 持有次数限制

MTT

: 最大持有次数限制

本文主要分析一个频繁GC (Allocation Failure)及young gc时间过长的case。

jdk版本

这里使用的是java8,参数没有明确指定metaspace的大小和上限,查看一下

相关参数

这里可以到full gc的reason是Ergonomics,是因为开启了UseAdaptiveSizePolicy,jvm自己进行自适应调整引发的full gc

分析完full gc之后我们看下young gc,看log里头99%都是GC (Allocation Failure)造成的young gc。Allocation Failure表示向young generation(eden)给新对象申请空间,但是young generation(eden)剩余的合适空间不够所需的大小导致的minor gc。

gc之后survivor有对象的例子

从上面的分析可以看出,young generation貌似有点大,ygc时间长;另外每次ygc之后survivor空间基本是空的,说明新生对象产生快,生命周期也短,原本设计的survivor空间没有派上用场。因此可以考虑缩小下young generation的大小,或者改为G1试试。

关于-XX:+PrintTenuringDistribution有几个要点,要明确一下:

1、用gcLogViewer分析gc.log,记录下FullGC的几个点,再到gc.log中具体去看那段时间的gc情况,一般就可以分析出FullGC的原因。

2、如果FullGC很频繁的话,也可以直接在服务器上通过jstat观察,对于反射调用特别多这种情况,建议注意看看PermGen的增长是不是FullGC的原因,如果是的话,开大PermGen,或者使用CMS方式对PermGen进行回收。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8347387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存