• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Sun jdk 1.6内存管理 -调优篇-毕玄
 

Sun jdk 1.6内存管理 -调优篇-毕玄

on

  • 764 views

 

Statistics

Views

Total Views
764
Views on SlideShare
764
Embed Views
0

Actions

Likes
0
Downloads
9
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Sun jdk 1.6内存管理 -调优篇-毕玄 Sun jdk 1.6内存管理 -调优篇-毕玄 Presentation Transcript

    • Sun JDK 1.6 内存管理 调优篇 毕玄 2010-10、2010-11
    • 目标• 掌握一些GC调优的基本技巧和模式• 如何编写对GC友好的代码
    • Steps Measure Tuning Set Goal
    • Measure - Factors• GC Factors – Footprint/Allocate Rate/LDS/Pause Time/Throughput• APP Factors – Response Time/QPS• System Factors – Load/CPU/IO
    • Measure - Tools• GC Log• jstat• jmap• sar• top• Case Show!
    • GC Myth来源于JavaOne2010 The Garbage Collector Mythbusters Session
    • Tuning GoalThroughput Latency
    • JVM Choice• 32 bit – 在linux上有3G地址空间的限制; – 通常而言分配给JVM堆最好控制在2G以下;• 64 bit – pointer占用内存更多 • 最好开启-XX:+UseCompressedOOPS – 如机器内存和CPU都满足的情况下,64 bit is the better choice。
    • GC Choice• Throughput more important – ParallelOldGC• Latencies more important – Usually ParallelOldGC first,if not satisfied then CMS.
    • Footprint• Heap Size Starting Point• Calculate Live Data Size – Set –Xms,-Xmx to 3x to 4x LDS
    • Patterns• Goal: 降低FGC执行的频率• 可选方案 – 增大old; • 在不放大heap的情况下,可能会造成一些问题; • 放大heap; – 尽可能减少从new晋升到old的对象; • Tenuring Threshold、Survivor Space Size; – 优化系统性能。• Case Show!
    • Patterns• Goal: 降低FGC执行的频率 – 我们的case • ItemDetail • TC • promotioncenter
    • Patterns• Goal: 减小FGC造成的暂停时间• 可选方案 – 减小Heap; – GC换为CMS; – 升级或增加CPU。• Case Show!
    • Patterns• Goal: 减小FGC造成的暂停时间 – 我们的case • htcvstore • TM on 64 bit
    • Patterns• Goal: 降低YGC的执行频率• 可选方案 – 增大新生代; • 有可能造成FGC频繁。 – 优化系统性能。
    • Patterns• Goal: 缩短YGC造成的暂停时间• 可选方案 – 减小新生代; • 有可能会造成new晋升到old的对象增加; – 增加或升级CPU。
    • Experiences• ParallelOldGC Tuning – 根据应用决定是否要启用AdaptiveSizePolicy – Use NUMA
    • 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;
    • Experiences• CMS GC Tuning – 碎片监测 • -XX:PrintFLSStatiscis=2 –XX:+PrintCMSStatiscis – GC Cycle Initiation Tuning • LDS & allocate rate,不能太频繁,也不能太晚
    • Experiences• CMS GC Tuning – 最重要的 • 不要出现promotion failed和concurrent mode failure。 • promotion failed – 降低触发比率; – 增大survivor space或old; • concurrent mode failure – 降低触发比率; – 增大old;
    • Experiences• CMS GC Tuning – 不同case不同策略 • 如YGC后存活的对象较少,可以考虑调小survivor space以及tenuring threshold,以降低YGC的执行频率 和耗时; • 如YGC后存活的对象较多,则需要调小新生代,调大 Survivor Space,尽可能减少晋升到Old的对象,此时 如晋升的太多,则会出现YGC耗时比较长,且CMS GC频繁的现象。• Case Show!
    • 目标• 掌握一些GC调优的基本技巧和模式• 如何编写对GC友好的代码
    • 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!
    • 目标• 掌握一些GC调优的基本技巧和模式• 如何编写对GC友好的代码
    • References• <Step by step GC Tuning> by Tony• JDK 6 complete options