1.jvm参数
-verbose:gc -Xloggc:/home/admin/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-verbose:gc 打出gc日志;
Xloggc 指定gc日志目录,如果不指定,gc的信息将输出到控制台上;
2.日志格式
[GC 353564.400: [ParNew: 1526656K->46208K(1526656K), 0.1964920 secs] 3363147K->1971089K(4148096K), 0.1968200 secs] [Times: user=0.81 sys=0.00, real=0.20 secs]
[GC [<collector>: <starting occupancy1|回收前大小> -> <ending occupancy1|回收后大小>(heap中对应区域总大小), <pause time1> secs] <starting occupancy3|堆回收前大小> -> <ending occupancy3|堆回收后大小>(堆总大小), <pause time3> secs]
3.gc类型说明
[GC] 和 [Full GC] 是垃圾回收的停顿类型,而不是区分是新生代还是年老代。
[Full GC] 说明发生了 Stop-The-World 。如果是调用 System.gc() 触发的,那么将显示的是 [Full GC (System) 。
【ParNew】,【DefNew】 , 【Tenured】 , 【Perm】: 表示 GC 发生的区域,区域的名称与使用的 GC 收集器相关。
【DefNew】:Serial 收集器中新生代名为 Default New Generation。
【ParNew】: “Parallel New Generation”。
【PSYoungGen】:对于 Parallel Scavenge 收集器,新生代名为 PSYoungGen。
年老代和永久代也相同,名称都由收集器决定。
4. gc时间
user: 用户态消耗的CPU时间
sys:内核态消耗的CPU时间
real:操作从开始到结束所经过的墙钟时间。墙钟时间包括各种非运算的等待耗时,如IO等待、线程阻塞。CPU时间不包括等待时间,当系统有多核时,多线程操作会 叠加这些CPU时间,所以user或sys时间会超过real时间。 [*]