Your SlideShare is downloading. ×
Sun JDK 1.6内存管理 -调优篇
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Sun JDK 1.6内存管理 -调优篇

7,330
views

Published on


0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,330
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
617
Comments
0
Likes
22
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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