Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Sun JDK 1.6 内存管理调优篇<br />bluedavy<br />2010-10、2010-11<br />
目标<br />掌握一些GC调优的基本技巧和模式<br />如何编写对GC友好的代码<br />
Steps<br />
Measure - Factors<br />GC Factors<br />Footprint/Allocate Rate/LDS/Pause Time/Throughput<br />APP Factors<br />Response Ti...
Measure - Tools<br />GC Log<br />jstat<br />jmap<br />sar<br />top<br />Case Show!<br />
GC Myth<br />来源于JavaOne2010The Garbage Collector Mythbusters Session<br />
Tuning Goal<br />Throughput<br />Latency<br />
JVM Choice<br />32 bit<br />在linux上有3G地址空间的限制;<br />通常而言分配给JVM堆最好控制在2G以下;<br />64 bit<br />pointer占用内存更多<br />最好开启-XX:+Use...
GC Choice<br />Throughput more important<br />ParallelOldGC<br />Latencies more important<br />Usually ParallelOldGCfirst,...
Footprint<br />Heap Size Starting Point<br />Calculate Live Data Size<br />Set –Xms,-Xmx to 3x to 4x LDS<br />
Patterns<br />Goal: 降低FGC执行的频率<br />可选方案<br />增大old;<br />在不放大heap的情况下,可能会造成一些问题;<br />放大heap;<br />尽可能减少从new晋升到old的对象;<br...
Patterns<br />Goal: 降低FGC执行的频率<br />cases<br />case 1<br />ThreadLocal保存的对象未清除,导致old gen一直占用很多;<br />case 2<br />默认的Parall...
Patterns<br />Goal: 减小FGC造成的暂停时间<br />可选方案<br />减小Heap;<br />GC换为CMS;<br />升级或增加CPU。<br />Case Show!<br />
Patterns<br />Goal: 减小FGC造成的暂停时间<br />cases<br />case 1<br />LDS很大,导致切换为CMS后,CMS GC造成的暂停时间是够短,但YGC比以前parallel慢了很多,于是最后只好降低...
Patterns<br />Goal: 降低YGC的执行频率<br />可选方案<br />增大新生代;<br />有可能造成FGC频繁。<br />优化系统性能,减少每次请求的内存消耗量。<br />
Patterns<br />Goal: 缩短YGC造成的暂停时间<br />可选方案<br />减小新生代;<br />有可能会造成new晋升到old的对象增加;<br />增加或升级CPU。<br />
Experiences<br />ParallelOldGC Tuning<br />根据应用决定是否要启用AdaptiveSizePolicy<br />Use NUMA<br />
Experiences<br />CMS GC Tuning<br />Tenuring Threshold Tuning<br />MTT越大,晋升到old的对象可能越少,同时可能会导致YGC耗时变长;<br />MTT越小,晋升到old的对...
Experiences<br />CMS GC Tuning<br />碎片监测<br />-XX:PrintFLSStatiscis=2 –XX:+PrintCMSStatiscis<br />GC Cycle Initiation Tuni...
Experiences<br />CMS GC Tuning<br />最重要的<br />不要出现promotion failed和concurrent mode failure。<br />promotion failed<br />降低触...
Experiences<br />CMS GC Tuning<br />不同case不同策略<br />如YGC后存活的对象较少,可以考虑调小survivor space以及tenuring threshold,以降低YGC的执行频率和耗时;<...
目标<br />掌握一些GC调优的基本技巧和模式<br />如何编写对GC友好的代码<br />
Write GC-Friendly Code<br />避免Autobox产生浪费;<br />合理控制数据结构的大小,例如List、Map、StringBuilder等;<br />合理使用Reference;<br />不要使用Finali...
目标<br />掌握一些GC调优的基本技巧和模式<br />如何编写对GC友好的代码<br />
References<br /><Step by step GC Tuning> by Tony<br />JDK 6 complete options<br />
Upcoming SlideShare
Loading in …5
×

Sun JDK 1.6内存管理 -调优篇

8,276 views

Published on

  • Be the first to comment

Sun JDK 1.6内存管理 -调优篇

  1. 1. Sun JDK 1.6 内存管理调优篇<br />bluedavy<br />2010-10、2010-11<br />
  2. 2. 目标<br />掌握一些GC调优的基本技巧和模式<br />如何编写对GC友好的代码<br />
  3. 3. Steps<br />
  4. 4. Measure - Factors<br />GC Factors<br />Footprint/Allocate Rate/LDS/Pause Time/Throughput<br />APP Factors<br />Response Time/QPS<br />System Factors<br />Load/CPU/IO<br />
  5. 5. Measure - Tools<br />GC Log<br />jstat<br />jmap<br />sar<br />top<br />Case Show!<br />
  6. 6. GC Myth<br />来源于JavaOne2010The Garbage Collector Mythbusters Session<br />
  7. 7. Tuning Goal<br />Throughput<br />Latency<br />
  8. 8. JVM Choice<br />32 bit<br />在linux上有3G地址空间的限制;<br />通常而言分配给JVM堆最好控制在2G以下;<br />64 bit<br />pointer占用内存更多<br />最好开启-XX:+UseCompressedOOPS<br />如机器内存和CPU都满足的情况下,64 bit is the better choice。<br />
  9. 9. GC Choice<br />Throughput more important<br />ParallelOldGC<br />Latencies more important<br />Usually ParallelOldGCfirst,if not satisfied then CMS.<br />
  10. 10. Footprint<br />Heap Size Starting Point<br />Calculate Live Data Size<br />Set –Xms,-Xmx to 3x to 4x LDS<br />
  11. 11. Patterns<br />Goal: 降低FGC执行的频率<br />可选方案<br />增大old;<br />在不放大heap的情况下,可能会造成一些问题;<br />放大heap;<br />尽可能减少从new晋升到old的对象;<br />Tenuring Threshold、Survivor Space Size;<br />优化系统性能。<br />Case Show!<br />
  12. 12. Patterns<br />Goal: 降低FGC执行的频率<br />cases<br />case 1<br />ThreadLocal保存的对象未清除,导致old gen一直占用很多;<br />case 2<br />默认的Parallel GC的动态调整策略导致to space总是很小,于是去掉了动态调整策略,并给予合理的to space大小;<br />
  13. 13. Patterns<br />Goal: 减小FGC造成的暂停时间<br />可选方案<br />减小Heap;<br />GC换为CMS;<br />升级或增加CPU。<br />Case Show!<br />
  14. 14. Patterns<br />Goal: 减小FGC造成的暂停时间<br />cases<br />case 1<br />LDS很大,导致切换为CMS后,CMS GC造成的暂停时间是够短,但YGC比以前parallel慢了很多,于是最后只好降低New Gen的大小,同时放大to space的大小,尽可能避免CMS GC内存分配慢带来的问题;<br />case 2<br />40 G的heap,16 core cpu,在采用Parallel GC时FGC一次要120s+,简单的切换为CMS后,降低为200ms+,出现过几次promotion failed,降低触发比率解决。<br />
  15. 15. Patterns<br />Goal: 降低YGC的执行频率<br />可选方案<br />增大新生代;<br />有可能造成FGC频繁。<br />优化系统性能,减少每次请求的内存消耗量。<br />
  16. 16. Patterns<br />Goal: 缩短YGC造成的暂停时间<br />可选方案<br />减小新生代;<br />有可能会造成new晋升到old的对象增加;<br />增加或升级CPU。<br />
  17. 17. Experiences<br />ParallelOldGC Tuning<br />根据应用决定是否要启用AdaptiveSizePolicy<br />Use NUMA<br />
  18. 18. Experiences<br />CMS GC Tuning<br />Tenuring Threshold Tuning<br />MTT越大,晋升到old的对象可能越少,同时可能会导致YGC耗时变长;<br />MTT越小,晋升到old的对象可能越多,同时可能会使得YGC耗时变短,但也就造成了old的GC更频繁,对于CMS而言,还会造成更多的内存碎片。<br />Best behavior: bytes surviving per age decrease as age increases.<br />Survivor Size Tuning<br />当太多对象晋升到Old时,可能会造成YGC耗时变长,此时应考虑适当放大Survivor Size;<br />
  19. 19. Experiences<br />CMS GC Tuning<br />碎片监测<br />-XX:PrintFLSStatiscis=2 –XX:+PrintCMSStatiscis<br />GC Cycle Initiation Tuning<br />LDS & allocate rate,不能太频繁,也不能太晚<br />
  20. 20. Experiences<br />CMS GC Tuning<br />最重要的<br />不要出现promotion failed和concurrent mode failure。<br />promotion failed<br />降低触发比率;<br />增大survivor space或old;<br />concurrent mode failure<br />降低触发比率;<br />增大old;<br />
  21. 21. Experiences<br />CMS GC Tuning<br />不同case不同策略<br />如YGC后存活的对象较少,可以考虑调小survivor space以及tenuring threshold,以降低YGC的执行频率和耗时;<br />如YGC后存活的对象较多,则需要调小新生代,调大Survivor Space,尽可能减少晋升到Old的对象,此时如晋升的太多,则会出现YGC耗时比较长,且CMS GC频繁的现象。<br />Case Show!<br />
  22. 22. 目标<br />掌握一些GC调优的基本技巧和模式<br />如何编写对GC友好的代码<br />
  23. 23. Write GC-Friendly Code<br />避免Autobox产生浪费;<br />合理控制数据结构的大小,例如List、Map、StringBuilder等;<br />合理使用Reference;<br />不要使用Finalizers来回收资源;<br />no guarantees when they will be run,or that they will not run at all.<br />更好的处理read-only的数据。<br />Case Show!<br />
  24. 24. 目标<br />掌握一些GC调优的基本技巧和模式<br />如何编写对GC友好的代码<br />
  25. 25. References<br /><Step by step GC Tuning> by Tony<br />JDK 6 complete options<br />

×