1. 程式人生 > >JAVA學習筆記--GC日誌解析

JAVA學習筆記--GC日誌解析

JAVA學習筆記–GC日誌解析

1、相關命令

使用GC日誌命令列選項為:

    -XX:+PrintGC 輸出GC日誌
    -XX:+PrintGCDetails 輸出GC的詳細日誌
    -XX:+PrintGCTimeStamps 輸出GC的時間戳(以基準時間的形式)
    -XX:+PrintGCDateStamps 輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800    -Xloggc:<filename> 可以指定檔案路徑
    // 如配置:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps

2、詳解

JVM【-server】

glassfish應用伺服器 -server 啟動 垃圾收集器預設組合方式為

新生代:Parallel Scavenge 並行回收GC
年老代和持久代:Parallel Old並行GC

Minor GC輸出格式:

293.271: [GC [PSYoungGen: 300865K->6577K(310720K)] 392829K->108873K(417472K), 0.0176464 secs] [Times: user=0.06 sys=0.00, real=0.01 secs] 

說明:

293.271是從jvm啟動直到垃圾收集發生所經歷的時間,GC表示這是一次Minor GC(新生代垃圾收集);

[PSYoungGen: 300865K->6577K(310720K)] 提供了新生代空間的資訊,PSYoungGen,表示新生代使用的是多執行緒垃圾收集器Parallel Scavenge。(DefNew:Serial收集器;ParNew:ParNew收集器),300865K表示垃圾收集之前新生代佔用空間,6577K表示垃圾收集之後新生代的空間。新生代又細分為一個Eden區和兩個Survivor區,Minor GC之後Eden區為空,6577K就是Survivor佔用的空間。括號裡的310720K表示整個年輕代的大小。

392829K->108873K(417472K),表示垃圾收集之前(392829K)與之後(108873K)Java堆的大小(總堆417472K,堆大小包括新生代和年老代)由新生代和Java堆佔用大小可以算出年老代佔用空間,如,Java堆大小417472K,新生代大小310720K那麼年老代佔用空間是417472K-310720K=106752k;垃圾收集之前老年代佔用的空間為392829K-300865K=91964k 垃圾收集之後老年代佔用空間108873K-6577K=102296k.

0.0176464 secs表示垃圾收集過程所消耗的時間。

[Times: user=0.06 sys=0.00, real=0.01 secs] 提供cpu使用及時間消耗,user是使用者模式垃圾收集消耗的cpu時間,例項中垃圾收集器消耗了0.06秒使用者態cpu時間,sys是消耗系統態cpu時間,real是指垃圾收集器消耗的實際時間。

Full GC輸出格式:

293.289: [Full GC [PSYoungGen: 6577K->0K(310720K)] [PSOldGen: 102295K->102198K(134208K)] 108873K->102198K(444928K) [PSPermGen: 59082K->58479K(104192K)], 0.3332354 secs] [Times: user=0.33 sys=0.00, real=0.33 secs] 

說明:

Full GC表示執行全域性垃圾回收

[PSYoungGen: 6577K->0K(310720K)] 提供新生代空間資訊,解釋同上
[PSOldGen: 102295K->102198K(134208K)]提供了年老代空間資訊;
108873K->102198K(444928K)整個堆空間資訊;
[PSPermGen: 59082K->58479K(104192K)]提供了持久代空間資訊。

JVM【-client】

glassfish應用伺服器 預設 -client啟動 垃圾收集器預設組合方式為

新生代:Serial序列GC (新生代使用-XX:+UseSerialGC收集器)
年老代和持久代:Serial Old 序列GC

GC日誌列印資訊:

Minor GC輸出格式:

9.007: [GC 9.007: [DefNew: 13526K->1060K(14400K), 0.0041350 secs] 44692K->32226K(46108K), 0.0041767 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

說明:

DefNew表示新生代使用Serial序列GC垃圾收集器,defNew提供新生代空間資訊;

DefNewGeneration 就是 default new generation

Full GC輸出格式:

9.348: [GC 9.348: [DefNew: 13953K->976K(14400K), 0.0040943 secs]9.352: [Tenured: 32163K->32220K(32220K), 0.1182207 secs] 45514K->32338K(46620K), [Perm : 30467K->30467K(65536K)], 0.1224318 secs] [Times: user=0.12 sys=0.00, real=0.13 secs] 

DefNew:表示新生代使用Serial序列GC垃圾收集器,defNew提供新生代空間資訊;
Tenured:提供年老代空間資訊;
45514K->32338K(46620K):整個堆空間大小資訊;
Perm :提供持久代空間資訊;