HotSpot GC调优原理与实践_第1页
HotSpot GC调优原理与实践_第2页
HotSpot GC调优原理与实践_第3页
HotSpot GC调优原理与实践_第4页
HotSpot GC调优原理与实践_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、HotSpot GC调优原理与实践 肖虎 Agenda 内存管理 GC算法 调优技巧 经验分享内存管理 Explicit (例如C) 分配内存:malloc 释放内存:free 优点 高效 缺点 开发成本高内存管理 Auto(例如Lisp、Java、.net、erLang) 语言本身来负责内存的分配和回收 优点 开发效率高 避免内存分配bug 缺点 不可预期的latency内存管理 Java Garbage Collector Memory Allocate Memory Free Garbage Collection Garbage: 没有被引用的对象 如忘记释放应该释放的 引用,就会 造成

2、memory leakSun JDK Memory Area-XX:PermSize XX:MaxPermSize-Xms -Xmx备注:在Sun JDK中本地方法栈和方法栈是同一个,因此也可用-Xss控制Sun JDK Memory Area 方法栈 & 本地方法栈 线程创建时产生,方法执行时生成栈帧; 方法区 存储类的元数据信息、常量、方法代码等; 堆 Java代码中所有的new操作; Native Memory(C Heap) Direct ByteBuffer、JNI、Compile、GC;GC in Hotspot备注:通常将对新生代进行的回收称为Minor GC或Young

3、 GC;对旧生代进行的回收称为Major GC,但由于Major GC除并发GC外均需对整个堆以及持久代进行扫描和回收,因此又称为Full GC。NewOldCopyingMark-Sweep or Mark-Compact Generational GC most objects are temp-lived so JDK decide split heap into two generations to use gc algorithm properlyGC in Hotspot Generational GCGC Algorithm Details Tracing Copying(a s

4、pecial case)图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Copying(a special case)图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Copying(a special case)图片来源于JavaOne 2010 The Garbage Collecti

5、on Mythbusters Session by tony,johnGC Algorithm Details Tracing Copying(a special case)图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Copying(a special case)图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm De

6、tails Tracing Copying(a special case)图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Copying(a special case) only need scan live objects,so gc speed only decided by lds no fragmentation need update object pointer need keep an empty memory areaEde

7、nS0S1Old GenerationNew GenerationGC Algorithm Details Tracing Mark-Sweep图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Mark-Sweep图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Mark-Sweep图片来源

8、于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Mark-Sweep图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Mark-Sweep图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algo

9、rithm Details Tracing Mark-Sweep图片来源于JavaOne 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Mark-Sweep need scan all objects,so if java heap becomes larger,then gc slower 可清除所有的Garbage 内存碎片,分配低效 需要在一定的时机触发GC Algorithm Details Tracing Mark-Compact图片来源于JavaOne

10、 2010 The Garbage Collection Mythbusters Session by tony,johnGC Algorithm Details Tracing Mark-Compact 没有内存碎片,分配高效 增加了回收需要耗费的时间 需要更新所有移动过的object的ref pointer 需要在一定时机触发GC Algorithm Summary Why gc need stop the world? Mark-Sweep,Mark-Compact if ref changes or new object created when marking; compact ne

11、ed update pointer,so. Copying copying need update pointer,so.Garbage Collector Serial Parallel YGC: Parallel Scavenge(PS) FGC: Parallel MSC, Parallel Compacting Concurrent YGC: ParNew FGC: CMS, fail then Serial MSCGarbage Collector - Serial Client模式下默认; 可用-XX:+UseSerialGC强制使用。 优点 对于Server应用而言,没看出有什么

12、优点 缺点 慢,不能充分发挥硬件资源Garbage Collector - Serial 细节参数 -XX:SurvivorRatio=x,控制eden/s0/s1的大小; -XX:MaxTenuringThreshold,用于控制对象在新生代存活的最大次数; -XX:PretenureSizeThreshold=x,控制超过多大字节的对象就在old上分配;Garbage Collector - ParallelGarbage Collector - Parallel Server模式下默认; YGC: PS FGC: Parallel MSC 可用-XX:+UseParallelGC或-XX

13、:+UseParallelOldGC来强制指定; ParallelGC代表FGC为Parallel MSC ParallelOldGC代表FGC为Parallel Compacting 优点 高效; 缺点 当heap变大后,造成的暂停时间会变得比较长。Garbage Collector - ParallelPartial Compact when use ParallelOldGCGarbage Collector - Parallel 细节参数 -XX:SurvivorRatio=x,控制eden/s0/s1的大小,含义为eden:survivor space; -XX:MaxTenurin

14、gThreshold,用于控制对象在新生代存活的最大次数; -XX:-UseAdaptiveSizePolicy,去掉YGC后动态调整eden、from以及tenuring threshold的动作; -XX:ParallelGCThreads,设置并行的线程数;Garbage Collector - Concurrent Mostly-Concurrent GCGarbage Collector - Concurrent 可用-XX:+UseConcMarkSweepGC来强制指定; 优点 在对Old进行回收时,对应用造成的暂停时间非常短,适合对latency要求高的应用; 缺点 需要更多的

15、内存 内存碎片和浮动垃圾; Old区上的内存分配效率低; 回收的整个耗时比较长; 和应用争抢CPU;Garbage Collector - Concurrent 细节参数 -XX:CMSInitiatingOccupancyFraction,设置Old Gen使用到达多少比率时触发; -XX:CMSInitiatingPermOccupancyFraction,设置Perm Gen使用到达多少比率时触发; -XX:+UseCMSInitiatingOccupancyOnly ,禁止hotspot自行触发CMS GC;Memory Monitoring 内存使用情况 Heap & Per

16、mGen jstat gc or jstat gcutil jmap heap C Heap topMemory Monitoring 谁用了内存 Heap jmap histo jmap dump,then mat(dump文件太大,windows mat无法分析,怎么办?) C Heap google perftoolsMemory Monitoring GC的状况 YGC/FGC的频率、耗时、回收的效果 jstat gcutil -XX:+PrintGCDetails XX:+PrintGCDateStamps Xloggc:GC Choice Throughput more impor

17、tant 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 LDSPatterns Goal: 降低FGC执行的频率 可选方案 增大old; 在不放大heap的情况下,可能会造成一些问题; 放大heap; 尽可能减少从new晋升到old的对象; Tenuring Threshold、Survi

18、vor Space Size; 优化系统性能。Patterns Goal: 减小FGC造成的暂停时间 可选方案 减小Heap; GC换为CMS; 升级或增加CPU。Patterns Goal: 降低YGC的执行频率 可选方案 增大新生代; 有可能造成FGC频繁。 优化系统性能。Patterns Goal: 缩短YGC造成的暂停时间 可选方案 减小新生代; 有可能会造成new晋升到old的对象增加; 增加或升级CPU。Experiences CMS GC Tuning Tenuring Threshold Tuning MTT越大,晋升到old的对象可能越少,同时可能会导致YGC耗时变长; MT

19、T越小,晋升到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 最重要的 不要出现promotion failed和concurrent mode failure。 promotion failed 降低触发比

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论