JVM的GC log

首先要打印gc log,需要加参数

打印简单的GC信息:-XX:+PrintGC

打印详细的GC信息:-XX:+PrintGCDateStamps,-XX:+PrintGCDetails

设置GC的日志路径: -Xloggc:/opt/sas/logs/gc.log-`date +"%Y%m%d_%H%M%S"` 

设置GCLog为自动Rotation的,下面要跟GClog rotation的规则:  -XX:+UseGCLogFileRotation 

设置GClog最多为20个: -XX:NumberOfGCLogFiles=20

设置GClog最大为10M: -XX:GCLogFileSize=10M

 

如果-XX:+PrintGCDetails,会把Eden区,S区和Old区的收集前、收集后,总大小分别打印出来

如果-XX:+PrintGCDateStamps,只会打印是何种类型的GC,和Heap的总大小,现在以-XX:+PrintGCDateStamps为例

首先说一下堆收缩和扩张

Heap是会根据需要而增大和收缩的,当堆的剩余空间不能满足工作需求的时候,会自动扩展堆的大小,直到Xmx规定的大小。

当堆太大而所需的空间没有那么大的时候,堆又会自动收缩

下面是慢慢增大的场景

JVM的GC log

下面是FullGC触发堆收缩的场景

JVM的GC log

GC log含义

[GC pause (G1 Evacuation Pause) (young) 687M->382M(800M), 0.0718612 secs]

发生的是young区的GC,从687M垃圾收集后到382M,heap总大小是800M,花费时间0.0718612 secs

[Full GC (System.gc())  1005M->447M(3920M), 2.8618046 secs]

发生的是FullGC,从1005M到447M,heap大小是3920M,花费时间是2.8618046 secs