18
G1GCを可視化してみました - G1GC Visualizer - 徳益芳郎 (某メーカー勤務) Java Day Tokyo 2013 Java The Night

Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

Embed Size (px)

DESCRIPTION

This slide is introduction about the G1GC Visualizer at Java The Night, Java Day Tokyo 2013.

Citation preview

Page 1: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

G1GCを可視化してみました- G1GC Visualizer -

     徳益芳郎 (某メーカー勤務)

Java Day Tokyo 2013Java The Night

Page 2: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

なぜ、可視化したの?昨年夏、社内勉強会で G1GC を説明するために...

Page 3: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

G1GCの資料を読んでみた

Page 4: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

へぇー

Page 5: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

G1GC の各世代管理各世代は Region の集合で表現

各世代の Region は必要なときに必要なだけ確保

Permanent 領域は

Region 単位の管理外

Old

Humongous

Survivor

Eden

Eden

Eden

EdenEden

Survivor

Permanent

Old

Old

Old

Old Old Old Old

OldOld

Old

Old

Old Old OldOld

Old

Old

Old Old

Page 6: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

退避 GC

Old

Humongous

Permanent

Old

Old

Old

Old Old Old Old

OldOld

Old

Old

OldOld

Old

Old

Old Old

Eden

Eden EdenEden

Survivor

Old Old

Collection Set 内の Lived オブジェクトを他の Region に退避する

Eden

Old

Humongous

Permanent

Old

Old

Old

Old Old Old

OldOld

Old

Old

OldOld

Old

Old

Old Old

Survivor Old

Old Old

Evacuate

Eden

Eden EdenEden

Survivor Eden

Page 7: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

なんとなく解ったけど...やっぱり、動かして確認しよう!

Page 8: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

Java VisualVM で観てみた

Page 9: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

でも、期待と違った!

Old

Humongous

Survivor

Eden

Eden

Eden

EdenEden

SurvivorOld

Old

Old

Old Old Old Old

OldOld

Old

Old

Old Old OldOld

Old

Old

Old Old

?Region管理を

イメージできない!

Page 10: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

....

311.040: [GC pause (young) (initial-mark), 0.00690255 secs] [Parallel Time: 6.6 ms] [GC Worker Start (ms): 311039.8 311039.8 311039.9 311045.7 Avg: 311041.3, Min: 311039.8, Max: 311045.7, Diff: 5.8] [Ext Root Scanning (ms): 3.0 4.0 5.0 0.0 Avg: 3.0, Min: 0.0, Max: 5.0, Diff: 5.0] [Update RS (ms): 1.6 0.7 0.1 0.0 Avg: 0.6, Min: 0.0, Max: 1.6, Diff: 1.6]

...

Avg: 0.1, Min: 0.0, Max: 0.1, Diff: 0.1] [Termination Attempts : 1 1 1 1 Sum: 4, Avg: 1, Min: 1, Max: 1, Diff: 0] [GC Worker End (ms): 311045.7 311045.7 311045.7 311045.7 Avg: 311045.7, Min: 311045.7, Max: 311045.7, Diff: 0.0] [GC Worker (ms): 5.9 5.9 5.8 0.0 Avg: 4.4, Min: 0.0, Max: 5.9, Diff: 5.9] [GC Worker Other (ms): 0.8 0.8 0.8 6.6 Avg: 2.2, Min: 0.8, Max: 6.6, Diff: 5.9] [Clear CT: 0.0 ms] ....

GCログを出力してみた-XX:+UseG1GC -Xloggc:<file> -XX:+PrintGCDetails

-XX:+UnlockDiagnosticVMOptions -XX:+G1PrintHeapRegions

....

G1HR ALLOC(Eden) 0x04c00000 G1HR ALLOC(Eden) 0x04000000 G1HR ALLOC(Eden) 0x05c00000 G1HR ALLOC(Eden) 0x04600000 G1HR ALLOC(Eden) 0x05d00000 G1HR #StartGC 261 G1HR CSET 0x04600000 G1HR CSET 0x05c00000 G1HR CSET 0x04000000 G1HR CSET 0x04c00000 G1HR CSET 0x04900000 G1HR REUSE 0x05500000 G1HR ALLOC(Survivor) 0x04b00000 G1HR RETIRE 0x04b00000 0x04b313d0 G1HR RETIRE 0x05500000 0x0553aa60 G1HR #EndGC 261 ....

Old

Humongous

Survivor

Eden

Eden

Eden

EdenEden

SurvivorOld

Old

Old

Old Old Old Old

OldOld

Old

Old

Old Old OldOld

Old

Old

Old Old

?やっぱり、Region管理をイメージできない!

Page 11: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

だったら...

自分で可視化しよう!

せっかくなので JavaFX で作っちゃおう!

Page 12: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

で、作ってみた...

....

G1HR ALLOC(Eden) 0x04c00000 G1HR ALLOC(Eden) 0x04000000 G1HR ALLOC(Eden) 0x05c00000 G1HR ALLOC(Eden) 0x04600000 G1HR ALLOC(Eden) 0x05d00000 G1HR #StartGC 261 G1HR CSET 0x04600000 G1HR CSET 0x05c00000 G1HR CSET 0x04000000 G1HR CSET 0x04c00000 G1HR CSET 0x04900000 G1HR REUSE 0x05500000 G1HR ALLOC(Survivor) 0x04b00000 G1HR RETIRE 0x04b00000 0x04b313d0 G1HR RETIRE 0x05500000 0x0553aa60 G1HR #EndGC 261 ....

Page 13: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

なんとなくイメージできた!?

Page 14: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

Region の状態を可視化

Page 15: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

Permanent 領域の可視化は対象外

Permanent

Page 16: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

G1GC イベントも可視化COMMIT / UNCOMMIT ヒープ領域の拡張・縮退ALLOC / ALLOC-FORCE 各世代への Region 割当

CSET 退避する Region の選定RETIRE Region の満杯前に退避終了REUSE 退避先として既存 Regionを再利用CLEAN CMS による Region の開放

POST-COMPACTION Full GC による Region 開放EVAC-FAILRE Region 退避の失敗

Page 17: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

Demo

Page 18: Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

終わり