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

下载本文档

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

文档简介

HotSpotGC调优原理与实践

肖虎

Agenda内存管理GC算法调优技巧经验分享内存管理Explicit(例如C)分配内存:malloc释放内存:free优点高效缺点开发成本高内存管理Auto(例如Lisp、Java、.net、erLang)语言本身来负责内存的分配和回收优点开发效率高避免内存分配bug缺点不可预期的latency内存管理JavaGarbageCollectorMemoryAllocateMemoryFreeGarbageCollectionGarbage:没有被引用的对象如忘记释放应该释放的

引用,就会

造成memoryleakSunJDKMemoryArea-XX:PermSize–XX:MaxPermSize-Xms-Xmx备注:在SunJDK中本地方法栈和方法栈是同一个,因此也可用-Xss控制SunJDKMemoryArea方法栈&本地方法栈线程创建时产生,方法执行时生成栈帧;方法区存储类的元数据信息、常量、方法代码等;堆Java代码中所有的new操作;NativeMemory(CHeap)DirectByteBuffer、JNI、Compile、GC;GCinHotspot备注:通常将对新生代进行的回收称为MinorGC或YoungGC;对旧生代进行的回收称为MajorGC,但由于MajorGC除并发GC外均需对整个堆以及持久代进行扫描和回收,因此又称为FullGC。NewOldCopyingMark-SweeporMark-CompactGenerationalGCmostobjectsaretemp-livedsoJDKdecidesplitheapintotwogenerationstousegcalgorithmproperlyGCinHotspotGenerationalGCGCAlgorithmDetailsTracing–Copying(aspecialcase)图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Copying(aspecialcase)图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Copying(aspecialcase)图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Copying(aspecialcase)图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Copying(aspecialcase)图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Copying(aspecialcase)图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Copying(aspecialcase)onlyneedscanliveobjects,sogcspeedonlydecidedbyldsnofragmentationneedupdateobjectpointerneedkeepanemptymemoryareaEdenS0S1OldGenerationNewGenerationGCAlgorithmDetailsTracing–Mark-Sweep图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Mark-Sweep图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Mark-Sweep图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Mark-Sweep图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Mark-Sweep图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Mark-Sweep图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Mark-Sweepneedscanallobjects,soifjavaheapbecomeslarger,thengcslower可清除所有的Garbage内存碎片,分配低效需要在一定的时机触发GCAlgorithmDetailsTracing–Mark-Compact图片来源于JavaOne2010《TheGarbageCollectionMythbusters》Sessionbytony,johnGCAlgorithmDetailsTracing–Mark-Compact没有内存碎片,分配高效增加了回收需要耗费的时间需要更新所有移动过的object的refpointer需要在一定时机触发GCAlgorithmSummaryWhygcneedstoptheworld?Mark-Sweep,Mark-Compactifrefchangesornewobjectcreatedwhenmarking;compactneedupdatepointer,so...Copyingcopyingneedupdatepointer,so...GarbageCollectorSerialParallelYGC:ParallelScavenge(PS)FGC:ParallelMSC,ParallelCompactingConcurrentYGC:ParNewFGC:CMS,failthenSerialMSCGarbageCollector-SerialClient模式下默认;可用-XX:+UseSerialGC强制使用。优点对于Server应用而言,没看出有什么优点缺点慢,不能充分发挥硬件资源GarbageCollector-Serial细节参数-XX:SurvivorRatio=x,控制eden/s0/s1的大小;-XX:MaxTenuringThreshold,用于控制对象在新生代存活的最大次数;-XX:PretenureSizeThreshold=x,控制超过多大字节的对象就在old上分配;GarbageCollector-ParallelGarbageCollector-ParallelServer模式下默认;YGC:PSFGC:ParallelMSC可用-XX:+UseParallelGC或-XX:+UseParallelOldGC来强制指定;ParallelGC代表FGC为ParallelMSCParallelOldGC代表FGC为ParallelCompacting优点高效;缺点当heap变大后,造成的暂停时间会变得比较长。GarbageCollector-ParallelPartialCompactwhenuseParallelOldGCGarbageCollector-Parallel细节参数-XX:SurvivorRatio=x,控制eden/s0/s1的大小,含义为eden:survivorspace;-XX:MaxTenuringThreshold,用于控制对象在新生代存活的最大次数;-XX:-UseAdaptiveSizePolicy,去掉YGC后动态调整eden、from以及tenuringthreshold的动作;-XX:ParallelGCThreads,设置并行的线程数;GarbageCollector-ConcurrentMostly-ConcurrentGCGarbageCollector-Concurrent可用-XX:+UseConcMarkSweepGC来强制指定;优点在对Old进行回收时,对应用造成的暂停时间非常短,适合对latency要求高的应用;缺点需要更多的内存内存碎片和浮动垃圾;Old区上的内存分配效率低;回收的整个耗时比较长;和应用争抢CPU;GarbageCollector-Concurrent细节参数-XX:CMSInitiatingOccupancyFraction,设置OldGen使用到达多少比率时触发;-XX:CMSInitiatingPermOccupancyFraction,设置PermGen使用到达多少比率时触发;-XX:+UseCMSInitiatingOccupancyOnly,禁止hotspot自行触发CMSGC;MemoryMonitoring内存使用情况Heap&PermGenjstat–gcorjstat–gcutiljmap

–heapCHeaptopMemoryMonitoring谁用了内存Heapjmap–histojmap–dump,thenmat(dump文件太大,windowsmat无法分析,怎么办?)CHeapgoogleperftoolsMemoryMonitoringGC的状况YGC/FGC的频率、耗时、回收的效果jstat–gcutil-XX:+PrintGCDetails–XX:+PrintGCDateStamps–Xloggc:<file>GCChoiceThroughputmoreimportantParallelOldGCLatenciesmoreimportantUsuallyParallelOldGCfirst,ifnotsatisfiedthenCMS.FootprintHeapSizeStartingPointCalculateLiveDataSizeSet–Xms,-Xmxto3xto4xLDSPatternsGoal:降低FGC执行的频率可选方案增大old;在不放大heap的情况下,可能会造成一些问题;放大heap;尽可能减少从new晋升到old的对象;TenuringThreshold、SurvivorSpaceSize;优化系统性能。PatternsGoal:减小FGC造成的暂停时间可选方案减小Heap;GC换为CMS;升级或增加CPU。PatternsGoal:降低YGC的执行频率可选方案增大新生代;有可能造成FGC频繁。优化系统性能。PatternsGoal:缩短YGC造成的暂停时间可选方案减小新生代;有可能会造成new晋升到old的对象增加;增加或升级CPU。ExperiencesCMSGCTuningTenuringThresholdTuningMTT越大,晋升到old的对象可能越少,同时可能会导致YGC耗时变长;MTT越小,晋升到old的对象可能越多,同时可能会使得YGC耗时变短,但也就造成了old的GC更频繁,对于CMS而言,还会造成更多的内存碎片。Bestbehavior:bytessurvivingperagedecreaseasageincreases.SurvivorSizeTuning当太多对象晋升到Old时,可能会造成YGC耗时变长,此时应考虑适当放大SurvivorSize;ExperiencesCMSGCTuning最重要的不要出现promotionfailed和motionfailed降低触

温馨提示

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

评论

0/150

提交评论