Sun jdk 1.6内存管理 -调优篇-毕玄
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

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

on

  • 919 views

 

Statistics

Views

Total Views
919
Views on SlideShare
919
Embed Views
0

Actions

Likes
0
Downloads
13
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内存管理 -调优篇-毕玄 Presentation Transcript

  • 1. Sun JDK 1.6 内存管理 调优篇 毕玄 2010-10、2010-11
  • 2. 目标• 掌握一些GC调优的基本技巧和模式• 如何编写对GC友好的代码
  • 3. Steps Measure Tuning Set Goal
  • 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来源于JavaOne2010 The Garbage Collector Mythbusters Session
  • 7. Tuning GoalThroughput 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 ParallelOldGC first,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执行的频率 – 我们的case • ItemDetail • TC • promotioncenter
  • 13. Patterns• Goal: 减小FGC造成的暂停时间• 可选方案 – 减小Heap; – GC换为CMS; – 升级或增加CPU。• Case Show!
  • 14. Patterns• Goal: 减小FGC造成的暂停时间 – 我们的case • htcvstore • TM on 64 bit
  • 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