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规定的大小。
当堆太大而所需的空间没有那么大的时候,堆又会自动收缩
下面是慢慢增大的场景
下面是FullGC触发堆收缩的场景
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