full gc 監控 分析

命令查看gc狀況,以及jvm內存使用比例java

  1. 如何發現是否發生FULL GC和FULL GC是否頻繁 使用JDK自帶的輕量級小工具jstat 語法結構:linux

    Usage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]windows

    參數解釋: Options — 選項,咱們通常使用 -gcutil 查看gc狀況 vmid — VM的進程號,即當前運行的java進程號 interval– 間隔時間,單位爲秒或者毫秒 count — 打印次數,若是缺省則打印無數次 好比 /opt/taobao/java/bin/jstat –gcutil pid 5000 jstat -gcutil pid併發

     

[root@wangfw-smarttrip-dev-7 ~]# jstat -gcutil 15393 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 22.50 71.58 34.74 97.33 3961 44.900 26 6.021 50.921jvm

S0 — Heap上的 Survivor space 0 區已使用空間的百分比 

    S1 — Heap上的 Survivor space 1 區已使用空間的百分比 

    E — Heap上的 Eden space 區已使用空間的百分比 

    O — Heap上的 Old space 區已使用空間的百分比 

    P — Perm space 區已使用空間的百分比 

    YGC — 從應用程序啓動到採樣時發生 Young GC 的次數 

    YGCT– 從應用程序啓動到採樣時 Young GC 所用的時間(單位秒) 

    FGC — 從應用程序啓動到採樣時發生 Full GC 的次數 

    FGCT– 從應用程序啓動到採樣時 Full GC 所用的時間(單位秒)

     GCT — 從應用程序啓動到採樣時用於垃圾回收的總時間(單位秒) 

    經過FGC咱們能夠發現系統是否發生FULL GC和FULL GC的頻率



2.  FULL GC分析和問題定位 

    a.     GC log收集和分析 

    (1)在JVM啓動參數增長:-verbose:gc -Xloggc:<file_name>  -XX:+Print        GCDetails -XX:+PrintGCDateStamps

    PrintGCTimeStamp只能得到相對時間,建議使用PrintGCDateStamps得到full gc 發生的絕對時間 

      (2)若是採用CMS GC,仔細分析jstat FGC輸出和GC 日誌會發現, CMS的每一個併發GC週期則有兩個stop-the-world階段——initial mark與final re-mark,使得CMS的每一個併發GC週期總共會更新full GC計數器兩次,initial mark與final re-mark各一次 
    
    b.     Dump JVM 內存快照 
/opt/taobao/java/bin/jmap -dump:format=b,file=dump.bin pid 

    這裏有一個問題是何時進行dump? 

    一種方法是前面提到的用jstat工具觀察,當OLD區到達比較高的比例如60%,通常會很快觸發一次FULL GC,能夠進行一次DUMP,在FULL GC發生之後再DUMP一次,這樣比較就能夠發現究竟是哪些對象致使不停的FULL GC 

    另一種方法是經過配置JVM參數 
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC分別用於指定在full GC以前與以後生成heap dump 

    c.     利用MAT((Memory Analyzer Tool)工具分析dump文件 

    關於MAT具體使用方法網上有不少介紹,這裏不作詳細展開,這裏須要注意的是: 

    (1)   MAT缺省只分析reachable的對象,unreachable的對象(將被收集掉的對象)被忽略,而分析FULL GC頻繁緣由時unreachable object也應該同時被重點關注。若是要顯示unreachable的對象細節必須用mat 1.1以上版本而且打開選項「keep unreachable object」 

    (2)   一般dump文件會好幾個G,沒法在windows上直接進行分析,咱們能夠先把dump文件在linux上進行分析,再把分析好的文件拷貝到windows上,在windows上用MAT打開分析文件。
相關文章
相關標籤/搜索