如何监控Java垃圾回收机制2

不同的jstat参数输出不同类型的列,如下表所示,根据你使用的”jstat option”会输出不同列的信息。

 
说明Jstat参数
S0C输出Survivor0空间的大小。单位KB。 -gc
-gccapacity
-gcnew
-gcnewcapacity
S1C输出Survivor1空间的大小。单位KB。 -gc
-gccapacity
-gcnew
-gcnewcapacity
S0U输出Survivor0已用空间的大小。单位KB。 -gc
-gcnew
S1U输出Survivor1已用空间的大小。单位KB。 -gc
-gcnew
EC输出Eden空间的大小。单位KB。 -gc
-gccapacity
-gcnew
-gcnewcapacity
EU输出Eden已用空间的大小。单位KB。 -gc
-gcnew
OC输出老年代空间的大小。单位KB。 -gc
-gccapacity
-gcold
-gcoldcapacity
OU输出老年代已用空间的大小。单位KB。 -gc
-gcold
PC输出持久代空间的大小。单位KB。 -gc
-gccapacity
-gcold
-gcoldcapacity
-gcpermcapacity
PU输出持久代已用空间的大小。单位KB。 -gc
-gcold
YGC新生代空间GC时间发生的次数。 -gc
-gccapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
YGCT新生代GC处理花费的时间。 -gc
-gcnew
-gcutil
-gccause
FGCfull GC发生的次数。 -gc
-gccapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
FGCTfull GC操作花费的时间 -gc
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
GCTGC操作花费的总时间。 -gc
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
NGCMN新生代最小空间容量,单位KB。 -gccapacity
-gcnewcapacity
NGCMX新生代最大空间容量,单位KB。 -gccapacity
-gcnewcapacity
NGC新生代当前空间容量,单位KB。 -gccapacity
-gcnewcapacity
OGCMN老年代最小空间容量,单位KB。 -gccapacity
-gcoldcapacity
OGCMX老年代最大空间容量,单位KB。 -gccapacity
-gcoldcapacity
OGC老年代当前空间容量制,单位KB。 -gccapacity
-gcoldcapacity
PGCMN持久代最小空间容量,单位KB。 -gccapacity
-gcpermcapacity
PGCMX持久代最大空间容量,单位KB。 -gccapacity
-gcpermcapacity
PGC持久代当前空间容量,单位KB。 -gccapacity
-gcpermcapacity
PC持久代当前空间大小,单位KB -gccapacity
-gcpermcapacity
PU持久代当前已用空间大小,单位KB -gc
-gcold
LGCC最后一次GC发生的原因-gccause
GCC当前GC发生的原因-gccause
TT老年化阈值。被移动到老年代之前,在新生代空存活的次数。-gcnew
MTT最大老年化阈值。被移动到老年代之前,在新生代空存活的次数。-gcnew
DSS幸存者区所需空间大小,单位KB。-gcnew

jstat 的好处是它可以持续的监控GC操作数据,不论Java应用是运行在本地还是远程,只要有控制台的地方就可以使用。当使用–gcutil 会输出如下信息。在GC优化的时候,你需要特别注意YGC, YGCT, FGC, FGCT 和GCT。

1
2
3
4
S0      S1       E        O        P        YGC    YGCT     FGC    FGCT     GCT
0.00    66.44    54.12    10.58    86.63    217    0.928     2     0.067    0.995
0.00    66.44    54.12    10.58    86.63    217    0.928     2     0.067    0.995
0.00    66.44    54.12    10.58    86.63    217    0.928     2     0.067    0.995

这些信息很重要,因为它们展示了GC处理到底花费了多少时间。
在这个例子中,YGC 是217而YGCT 是0.928,这样在简单的计算数据平均数后,你可以知道每次新生代的GC大概需要4ms(0.004秒),而full GC的平均时间为33ms。
但是,只看数据平均数经常无法分析出真正的GC问题。这是主要是因为GC操作时间严重的偏差(换句话说,假如两次full GC的时间是 67ms,那么其中的一次full GC可能执行了10ms而另一个可能执行了57ms。)为了更好地检测每次GC处理时间,最好使用 –verbosegc来替代数据平均数。

-verbosegc

-verbosegc 是在启动一个Java应用时可以指定的JVM参数之一。而jstat 可以监控任何JVM应用,即便它没有制定任何参数。 -verbosegc 需要在启动的时候指定,因此你可能会认为它没有必要(因为jstat可以替代之)。但是, -verbosegc 会以更浅显易懂的方式展现GC发生的结果,因此他对于监控监控GC信息十分有用。

 

 
 jstat-verbosegc
监控对象运行在本机的Java应用可以把日志输出到终端上,或者借助jstatd命令通过网络连接远程的Java应用。只有那些把-verbogc作为启动参数的JVM。
输出信息堆状态(已用空间,最大限制,GC执行次数/时间,等等)执行GC前后新生代和老年代空间大小,GC执行时间。
输出时间 Every designated time
每次设定好的时间。
每次GC发生的时候。
何时有用。当你试图观察堆空间变化情况当你试图了解单次GC产生的效果。

下面是-verbosegc 的可用参数
· -XX:+PrintGCDetails
· -XX:+PrintGCTimeStamps
· -XX:+PrintHeapAtGC
· -XX:+PrintGCDateStamps (from JDK 6 update 4)

如果只是用了 -verbosegc 。那么默认会加上 -XX:+PrintGCDetails。 –verbosgc 的附加参数并不是独立的。而是经常组合起来使用。
使用 –verbosegc后,每次GC发生你都会看到如下格式的结果。

[GC [<collector>: <starting occupancy1> -> <ending occupancy1>, <pause time1> secs] <starting occupancy3> -> <ending occupancy3>, <pause time3> secs]

收集器minor gc使用的收集器的名字。
starting occupancy1GC执行前新生代空间大小。
ending occupancy1GC执行后新生代空间大小。
pause time1因为执行minor GC,Java应用暂停的时间。
starting occupancy3GC执行前堆区域总大小
ending occupancy3GC执行后堆区域总大小
pause time3Java应用由于执行堆空间GC(包括major GC)而停止的时间。

这是-verbosegc 输出的minor GC的例子。

1
2
3
4
S0    S1     E      O      P        YGC    YGCT    FGC    FGCT     GCT
0.00  66.44  54.12  10.58  86.63    217    0.928     2    0.067    0.995
0.00  66.44  54.12  10.58  86.63    217    0.928     2    0.067    0.995
0.00  66.44  54.12  10.58  86.63    217    0.928     2    0.067    0.995
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值