淺談 java gc 原理、調教和新發展

80
淺談 Java GC 原理、調教和 新發展 Leon Chen 陳逸嘉 Java Architect 文曄科技

Upload: leon-chen

Post on 27-Aug-2014

2.962 views

Category:

Software


5 download

DESCRIPTION

淺談 Java GC 原理、調教和 新發展 - Java Developer Day 2014 @ Taiwan

TRANSCRIPT

Page 1: 淺談 Java GC 原理、調教和新發展

淺談 Java GC 原理、調教和

新發展�  � Leon Chen

陳逸嘉� �

Java Architect 文曄科技�

Page 2: 淺談 Java GC 原理、調教和新發展

陳逸嘉 (Leon  Chen)� •  Master  of  NTHU  CS  •  More  than  15  years  in  Java/JEE,  as  programmer,  architect,  developer  leader  and  consultant,  in  finance/telecom  domain.  •  工研院� •  得捷� •  新光人壽� •  Ericsson  •  Oracle  •  文曄科技 (WT  Microelectronics)  

2�

Page 3: 淺談 Java GC 原理、調教和新發展

著作� •  TW  Patent  182927,  一種文章切割方法,  2003,  陳逸嘉,  林一中� •  TW  Patent  206819,  自動服務組合方法及系統,  2004,  陳逸嘉,  許維德,  洪

鵬翔 � •  US  Patent  7,617,174,  Method  and  system  for  automaRc  service  

composiRon,  2009,  Leon  Chen,  Wei-­‐Tek  Hsu,  Peng-­‐Hsiang  Hung  �

3�

Page 4: 淺談 Java GC 原理、調教和新發展

Garbage  CollecRon�

4�

我真的需要花時間去 � Tune GC 嗎?�

Page 5: 淺談 Java GC 原理、調教和新發展

Performance  Impact  of  GC�

5�

Java  SE  6  HotSpot[tm]  Virtual  Machine  Garbage  CollecRon  Tuning  h[p://www.oracle.com/technetwork/java/javase/gc-­‐tuning-­‐6-­‐140523.html

0.6

0.2

8 32

Page 6: 淺談 Java GC 原理、調教和新發展

有資格被回收的物件?�

6�

Page 7: 淺談 Java GC 原理、調教和新發展

Java  Memory  Management�

7�

Page 8: 淺談 Java GC 原理、調教和新發展

Java  Memory  Management�

8� h[ps://www.youtube.com/watch?v=450maTzSIvA  

Page 9: 淺談 Java GC 原理、調教和新發展

Tracing  GC  Example�

9�

Page 10: 淺談 Java GC 原理、調教和新發展

Tracing  GC  Example�

10�

Page 11: 淺談 Java GC 原理、調教和新發展

Tracing  GC  Example�

11�

Page 12: 淺談 Java GC 原理、調教和新發展

Tracing  GC  Example�

12�

Page 13: 淺談 Java GC 原理、調教和新發展

Tracing  GC  Example�

13�

Page 14: 淺談 Java GC 原理、調教和新發展

Tracing  GC  Example�

14�

Page 15: 淺談 Java GC 原理、調教和新發展

JAVA  HEAP  STRUCTURE  AND  GC�

15�

Page 16: 淺談 Java GC 原理、調教和新發展

Hotspot  JVM  Heap  Layout�

16�

Young   Old  (Tenured)   Permanent  

Eden   From   To  

Survivor  Spaces  

NaRve  

-­‐Xms  -­‐Xmx   -­‐XX:PermSize  -­‐XX:MaxPermSize   NO  

Page 17: 淺談 Java GC 原理、調教和新發展

GC  Fundamentals  Garbage  DistribuRon  –  Objects  die  young�

17�

Page 18: 淺談 Java GC 原理、調教和新發展

18�

GC  Fundamentals  Garbage  DistribuRon  –  Objects  die  young�

Page 19: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

19�

Young   Old  

Eden   From   To  

Survivor  Spaces  

Page 20: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

20�

Young   Old  

Eden   From   To  

Survivor  Spaces  

!"

!" !"!" !"

!" !"

Page 21: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

21�

Young   Old  

Eden   From   To  

Survivor  Spaces  

1 1 1

Page 22: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

22�

Young   Old  

Eden   To   From  

Survivor  Spaces  

1 1 1

Page 23: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

23�

!"

Young   Old  

Eden   To   From  

Survivor  Spaces  

!" !" !"

!" !" !" !"

1 !"

1 1  1  

Page 24: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

24�

Young   Old  

Eden   To   From  

Survivor  Spaces  

1   2  1   2  

Page 25: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

25�

Young   Old  

Eden   From   To  

Survivor  Spaces  

1   2  1   2  

Page 26: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

26�

Young   Old  

Eden   From   To  

Survivor  Spaces  

16   1  16   2  

!" !" !" !"

!" !" !" !"

16  16  

Promo

Page 27: 淺談 Java GC 原理、調教和新發展

Minor  GC  (Young  GeneraRon  GC)�

27�

Young   Old  

Eden   To   From  

Survivor  Spaces  

17  17  

1 2 1 3  

Page 28: 淺談 Java GC 原理、調教和新發展

Major  GC  (Old  GeneraRon  GC,  Full  GC)�

28�

Young   Old  

Eden   To   From  

Survivor  Spaces  

Page 29: 淺談 Java GC 原理、調教和新發展

Major  GC  (Old  GeneraRon  GC,  Full  GC)�

29�

Young   Old  

Eden   To   From  

Survivor  Spaces  

!"

!"

!"!"

!"

Page 30: 淺談 Java GC 原理、調教和新發展

Major  GC  (Old  GeneraRon  GC,  Full  GC)�

30�

Young   Old  

Eden   To   From  

Survivor  Spaces  

Compact

Page 31: 淺談 Java GC 原理、調教和新發展

Tuning  Guideline� •  讓  heap  的 size  足以容納程式的一般運作  •  Major  GC  通常會比  Minor  GC  花更多的時間� •  盡可能減少  Major  GC  的次數  

31�

Page 32: 淺談 Java GC 原理、調教和新發展

HOTSPOT  GC  TUNING�

32�

Page 33: 淺談 Java GC 原理、調教和新發展

33�

花太多時間做 GC → Performance變慢�

Performance變慢→花太多時間做 GC 不一定!!!�

Page 34: 淺談 Java GC 原理、調教和新發展

Performance  Tuning  Methodology�

34� Advanced  JVM  Tuning;  Java  One  2011;  David  Keenan,  Monica  Beckwith  

Page 35: 淺談 Java GC 原理、調教和新發展

GC  Logging  in  ProducRon� •  Don’t  be  afraid  to  enable  GC  logging  in  producRon  – Very  helpful  when  diagnosing  producRon  issues  

•  Extremely  low  /  non-­‐existent  overhead  – Maybe  some  large  files  in  your  file  system.  – We  are  surprised  that  customers  are  sRll  afraid  to  enable  it  

35�

Page 36: 淺談 Java GC 原理、調教和新發展

36�

If  Someone  doesn’t  enable    GC  logging  in  producEon  

I  shoot  them!  

Page 37: 淺談 Java GC 原理、調教和新發展

Most  Important  GC  Logging  Parameters�

•  You  need  at  least:  –  -­‐XX:+PrintGCDetails  –  -­‐XX:+PrintGCTimeStamps  

•  Add  -­‐XX:+PrintGCDateStamps  if  you  must  know  the  Rme  

•  Also  useful  –  -­‐Xloggc:<file>  –  Rotate  GC  Log,  Aqer  Java  1.6_34  (or  1.7_2):  -­‐XX:+UseGCLogFileRotaRon    -­‐XX:NumberOfGCLogFiles=5    -­‐XX:GCLogFileSize=10M  

 37�

Page 38: 淺談 Java GC 原理、調教和新發展

GCViewer  –  Offline  analysis  of  GC  logs  h[ps://github.com/chewiebug/GCViewer�

38�

Page 39: 淺談 Java GC 原理、調教和新發展

GCViewer  –  Memory  Leak  Pa[ern  �

39�

Page 40: 淺談 Java GC 原理、調教和新發展

Footprint  (Heap  Size)

Latencies Throughput

Page 41: 淺談 Java GC 原理、調教和新發展

Footprint  (Heap  Size)

Latencies Throughput

Page 42: 淺談 Java GC 原理、調教和新發展

Hotspot  Tuning  -­‐  Sizing  Heap� •  Young  GeneraRon  size  determines  

•  Frequency  of  minor  GC    •  Number  of  objects  reclaimed  in  minor  GC  

•  Old  GeneraRon  Size  •  Should  hold  applicaRon's  steady-­‐state  live  data  size  •  Try  to  minimize  frequency  of  major  GC’s  

•  JVM  footprint  should  not  exceed  physical  memory  •  Max  of  80-­‐90%  RAM  (leave  room  for  OS)  

•  Thumb  Rule:  Try  to  maximize  objects  reclaimed  in  young  gen.  Minimize  Full  GC  frequency  

42�

Page 43: 淺談 Java GC 原理、調教和新發展

Calculate Live Data Size (LDS)� •  經過 full  GC  後,  所剩下的  heap  size  •  Make  sure  you  get  full  GCs  during  steady-­‐state  •  Induce  a  couple  if  necessary  

–  JConsole  /  VisualVM  –  jmap  -­‐histo:live  <pid>  – System.gc  

•  Remove  it  before  deployment.  :-­‐)�

43�

Page 44: 淺談 Java GC 原理、調教和新發展

Calculate  Live  Data  Size� •  GC  log  example:  

44�

Page 45: 淺談 Java GC 原理、調教和新發展

Calculate  Live  Data  Size  by  GCViewer�

45�

Page 46: 淺談 Java GC 原理、調教和新發展

IniRal  Heap  ConfiguraRon� •  Rule  of  thumb  

– Set  -­‐Xms  and  -­‐Xmx  to  3x  to  4x  LDS  – Set  both  -­‐XX:PermSize  and  -­‐XX:MaxPermSize  to  around  1.2x  to  1.5x  the  max  perm  gen  size  

– Set  the  generaRon  sizes  accordingly  •  Young  gen  should  be  around  1x  to  1.5x  LDS  •  Old  gen  should  be  around  2x  to  3x  LDS  •  e.g.,  young  gen  should  be  around  1/3-­‐1/4  of  the  heap  size  

46�

Page 47: 淺談 Java GC 原理、調教和新發展

Hotspot  JVM  Heap  Layout�

47�

Young  –Xmn768m   Old  (Tenured)   Permanent   NaRve  

-­‐Xms2g  –Xmx2g   -­‐XX:PermSize  -­‐XX:MaxPermSize  

For  LDS  of  512m  :  -­‐Xmn768m  -­‐Xms2g  -­‐Xmx2g  

Page 48: 淺談 Java GC 原理、調教和新發展

48�

Footprint  (Heap  Size)

Latencies Throughput

Page 49: 淺談 Java GC 原理、調教和新發展

High  Throughput  vs.  Low  Latency�

49�

High  Throughput   Low  Latency    

App Thread

GC Thread

專心� 分心�

較低� 較高� 較長� 較短� Stop the world�

Total Cost�

Page 50: 淺談 Java GC 原理、調教和新發展

High  Throughput  vs.  Low  Latency� •  For  most  applicaRons,  GC  overhead  is  small  

–  2%  –  5%  •  High  Throughput  GCs  

– Move  most  work  to  GC  pauses  – ApplicaRon  threads  do  as  li[le  as  possible  –  Least  overall  GC  overhead  

•  Low  Latency  (Pause)  GCs  – Move  work  out  of  GC  pauses  – ApplicaRon  threads  do  more  work  

•  Bookkeeping  for  GC  more  expensive  – More  overall  GC  overhead  

50�

Page 51: 淺談 Java GC 原理、調教和新發展

ApplicaRon  Requirement� •  Different  applicaRons  have  different  requirements  – Higher  Throughput:  

•  Batch  processing  • Web  applicaRon:  pauses  during  garbage  collecRon  may  be  tolerable,  or  simply  obscured  by  network  latencies    

– Lower  Latencies:  •  InteracRve  graphics  applicaRon  

51�

Page 52: 淺談 Java GC 原理、調教和新發展

HotSpot  Garbage  Collectors  in  Java  SE  6�

52�

G1  

-XX:+UseSerialGC

-XX:+UseConcMarkSweepGC -XX:+UseParallelOldGC

-XX:+UseParallelGC -­‐XX:+UseParNewGC

Page 53: 淺談 Java GC 原理、調教和新發展

HotSpot  Garbage  Collectors  in  Java  SE  6�

53�

G1  

-XX:+UseSerialGC

-XX:+UseConcMarkSweepGC -XX:+UseParallelOldGC

-XX:+UseParallelGC -­‐XX:+UseParNewGC

Page 54: 淺談 Java GC 原理、調教和新發展

Serial  Collector�

54�

App Thread

GC Thread

stop-­‐the-­‐world  pause  

Serial  Collector  

Page 55: 淺談 Java GC 原理、調教和新發展

HotSpot  Garbage  Collectors  in  Java  SE  6�

55�

G1  

-XX:+UseSerialGC

-XX:+UseConcMarkSweepGC -XX:+UseParallelOldGC

-XX:+UseParallelGC -­‐XX:+UseParNewGC

Page 56: 淺談 Java GC 原理、調教和新發展

Serial  VS  Parallel  Collector�

56�

App Thread

GC Thread

stop-­‐the-­‐world  pause  

Serial  Collector  

Parallel  Collector  

Page 57: 淺談 Java GC 原理、調教和新發展

HotSpot  Garbage  Collectors  in  Java  SE  6�

57�

G1  

-XX:+UseSerialGC

-XX:+UseConcMarkSweepGC -XX:+UseParallelOldGC

-XX:+UseParallelGC -­‐XX:+UseParNewGC

Page 58: 淺談 Java GC 原理、調教和新發展

CMS  Collector�

58�

App Thread

GC Thread

iniRal  mark  

concurrent  marking  

remark  

concurrent  sweeping  

Page 59: 淺談 Java GC 原理、調教和新發展

CMS  Collector  with  ParNewGC�

59�

App Thread

GC Thread

Page 60: 淺談 Java GC 原理、調教和新發展

GC  SuggesRons�

60�

Low  Latency  Collectors   Throughput  Collectors  GeneraRon  

Young  

Old  

2+  CPUs  

-XX:+UseParNewGC

2+  CPUs  

-XX:+UseParallelGC

-XX:+UseConcMarkSweepGC

-XX:+UseParallelOldGC

New  G1  Collector  as  of  WLS10.3.1/JDK  6  Update  14  

Page 61: 淺談 Java GC 原理、調教和新發展

NEXT  GENERATION  GC�

Page 62: 淺談 Java GC 原理、調教和新發展

Problems  of  Current  GC� •  Memory  is  cheaper  and  cheaper  •  64  bits  JVM  •  We  can  use  very  large  heap!�

Young   Old  

How  to  handle  large  heap  size?

Page 63: 淺談 Java GC 原理、調教和新發展

G1  Collector� •  The  Garbage-­‐First  Collector  

–  Since  JDK  6u14,  officially  supported  as  of  JDK  7u4  –  -­‐XX:+UseG1GC  –  Future  CMS  Replacement  –  Server  “Style”  low  latency  collector  

•  Parallel  •  Concurrent  

–  GeneraRonal  –  Good  Throughput  –  CompacRng  –  Improved  ease-­‐of-­‐use  –  Predictable  (Soq  Real-­‐Time)  

63�

Page 64: 淺談 Java GC 原理、調教和新發展

G1  –  Heap  Layout�

64�

S

S

Old

Eden

S Survivor

Free

Region Type

Page 65: 淺談 Java GC 原理、調教和新發展

CMS  vs  G1  Collectors�

65�

•   Heap  split  into  regions    •   Young  generaRon  (A  set  of  regions)  •   Old  generaRon  (A  set  of  regions)  

Page 66: 淺談 Java GC 原理、調教和新發展

G1  Collector:    Parallelism  &  Concurrency�

66�

App Thread

GC Thread

Page 67: 淺談 Java GC 原理、調教和新發展

GC  Comparison�

67�

Page 68: 淺談 Java GC 原理、調教和新發展

GC  Comparison�

68�

Page 69: 淺談 Java GC 原理、調教和新發展

GC  Comparison�

69�

Page 70: 淺談 Java GC 原理、調教和新發展

GC  Comparison�

70�

h[p://blog.mgm-­‐tp.com/2013/03/garbage-­‐collecRon-­‐tuning/

Page 71: 淺談 Java GC 原理、調教和新發展

什麼時候該使用G1?� •  Large  heaps  

– Typically  ~6GB  or  larger  heaps  •  ApplicaRons  that  needs  low  pauses  

71�

Page 72: 淺談 Java GC 原理、調教和新發展

什麼時候不該使用 G1?� •  G1需要更多的compuRng  resources和memory  來運行  

•  No  large  heaps  – Typically  smaller  than  6GB  

•  ApplicaRons  that  don’t  need  low  pauses    

72�

Page 73: 淺談 Java GC 原理、調教和新發展

SUMMARIZE�

Page 74: 淺談 Java GC 原理、調教和新發展

Summarize� •  Professional  developer  必須非常了解  variables,  objects  的  life  cycle,  objects  何時有資格被會收  

•  GC  will  hurt  system  performance  •  Must  monitor  GC  acRviRes  •  Must  enable  GC  logging  

Page 75: 淺談 Java GC 原理、調教和新發展

Tuning  Procedures� •  Observer  LDS  to  decide  iniRal  size  se~ng  •  Use  parallel  GC  first  •  If  the  GC  pause  Rme  can’t  be  accepted,  then  trying  to  use  CMS  

•  If  heap  is  over  6G,  and  look  for  lower  down  pause  Rme,  you  can  consider  G1  

•  Monitoring  -­‐>  Analyzing  -­‐>  Tuning  -­‐>  Monitoring  -­‐>  …�

75�

Page 76: 淺談 Java GC 原理、調教和新發展

REFERENCES�

76�

Page 77: 淺談 Java GC 原理、調教和新發展

References� •  Step-­‐by-­‐Step:  Garbage  CollecRon  Tuning  in  the  Java  HotSpot™  Virtual  Machine  –  JavaOne  2010  

•  The  Garbage  CollecRon  Mythbusters  –  JavaOne  2010  

•  GC  Tuning  for  the  HotSpot  JVM  –  JavaOne  2009  •  uPortal  Performance  OpRmizaRon.  Faizan  Ahmed.  Architect  and  Engineering  Group.  Enterprise  Systems  &  Services.  RUTGERS.  [email protected].  

•  h[p://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html  

Page 78: 淺談 Java GC 原理、調教和新發展

•  Java  Performance  –    Charlie  Hunt,  Binu  John    

•  HotSpot  GC  Tuning  Guide    for  Java  SE  6  h[p://www.oracle.com/technetwork/java/javase/gc-­‐tuning-­‐6-­‐140523.html  

•  Memory  Management  in  the  Java  HotSpot  VM  h[p://www.oracle.com/technetwork/java/javase/memorymanagement-­‐whitepaper-­‐150215.pdf  

•  Java  6  Performance  Whitepaper  h]p://java.sun.com/performance/reference/whitepapers/6_performance.html  

78�

Page 79: 淺談 Java GC 原理、調教和新發展

Q&A�

79�

Page 80: 淺談 Java GC 原理、調教和新發展

Parallel   Concurrent  (CMS)  

G1