知识大全 JVM调优的几种策略

Posted 停顿

篇首语:盛年不重来,一日难再晨,及时当勉励,岁月不待人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JVM调优的几种策略相关的知识,希望对你有一定的参考价值。

JVM调优的几种策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    JVM参数调优是一个很头痛的问题 可能和应用有关系 别人说可以的对自己不一定管用 下面是本人一些JVM调优的实践经验 希望对读者能有帮助 环境LinuxAS resin JDK CPU G内存 dell 服务器         JVM调优        一 JVM调优之串行垃圾回收        也就是默认配置 完成 万request用时 秒 JVM参数配置如下         $JAVA_ARGS = Dresin home=$SERVER_ROOT server        Xms M Xmx M Xmn M        XX:PermSize= M XX:MaxPermSize= M        XX:MaxTenuringThreshold= XX:GCTimeRatio=         Xnoclassgc Xloggc:log/gc log        XX:+PrintGCDetails XX:+PrintGCTimeStamps ;        这种配置一般在resin启动 小时内似乎没有大问题 网站可以正常访问 但查看日志发现 在接近 小时时 FullGC执行越来越频繁 大约每隔 分钟就有一次FullGC 每次FullGC系统会停顿 秒左右 作为一个网站来说 用户等待 秒恐怕太长了 所以这种方式有待改善 MaxTenuringThreshold= 表示一个对象如果在救助空间移动 次还没有被回收就放入年老代 GCTimeRatio= 表示java可以用 %的时间来做垃圾回收 /( + )= / = %         二 JVM调优之并行回收        完成 万request用时 秒 配置如下         $JAVA_ARGS = Dresin home=$SERVER_ROOT server Xmx M        Xms M Xmn M XX:PermSize= M XX:MaxPermSize= M        Xnoclassgc Xloggc:log/gc log XX:+PrintGCDetails        XX:+PrintGCTimeStamps XX:+UseParallelGC XX:ParallelGCThreads=         XX:+UseParallelOldGC XX:MaxGCPauseMillis=         XX:+UseAdaptiveSizePolicy XX:MaxTenuringThreshold=         XX:GCTimeRatio= ;        并行回收我尝试过多种组合配置 似乎都没什么用 resin启动 小时左右就会停顿 时间超过 秒 也有可能是参数设置不够好的原因 MaxGCPauseMillis表示GC最大停顿时间 在resin刚启动还没有执行FullGC时系统是正常的 但一旦执行FullGC MaxGCPauseMillis根本没有用 停顿时间可能超过 秒 之后会发生什么我也不再关心了 赶紧重启resin 尝试其他回收策略         三 JVM调优之并发回收        完成 万request用时 秒 比并行回收差不多快一倍 是默认回收策略性能的 倍 配置如下         $JAVA_ARGS = Dresin home=$SERVER_ROOT server        Xms M Xmx M Xmn M XX:PermSize= M        XX:MaxPermSize= M XX:+UseConcMarkSweepGC        XX:MaxTenuringThreshold= XX:GCTimeRatio=         Xnoclassgc Xloggc:log/gc log XX:+PrintGCDetails        XX:+PrintGCTimeStamps XX:+UseCMSCompactAtFullCollection        XX:CMSFullGCsBeforeCompaction= ;        这个配置虽然不会出现 秒连不上的情况 但系统重启 个小时左右 每隔几分钟就会有 秒连不上的情况 查看gc log 发现在执行ParNewGC时有个promotionfailed错误 从而转向执行FullGC 造成系统停顿 而且会很频繁 每隔几分钟就有一次 所以还得改善 UseCMSCompactAtFullCollection是表是执行FullGC后对内存进行整理压缩 免得产生内存碎片 CMSFullGCsBeforeCompaction=N表示执行N次FullGC后执行内存压缩         四 JVM调优之增量回收        完成 万request用时 秒 太慢了 配置如下         $JAVA_ARGS = Dresin home=$SERVER_ROOT server        Xms M Xmx M Xmn M XX:PermSize= M        XX:MaxPermSize= M XX:MaxTenuringThreshold=         XX:GCTimeRatio= Xnoclassgc Xloggc:log/gc log        XX:+PrintGCDetails XX:+PrintGCTimeStamps Xincgc ;        似乎回收得也不太干净 而且也对性能有较大影响 不值得试         五 JVM调优之并发回收的I CMS模式        和增量回收差不多 完成 万request用时 秒 配置如下         $JAVA_ARGS = Dresin home=$SERVER_ROOT server        Xms M Xmx M Xmn M XX:PermSize= M        XX:MaxPermSize= M XX:MaxTenuringThreshold=         XX:GCTimeRatio= Xnoclassgc Xloggc:log/gc log        XX:+PrintGCDetails XX:+PrintGCTimeStamps        XX:+UseConcMarkSweepGC XX:+CMSIncrementalMode        XX:+CMSIncrementalPacing        XX:CMSIncrementalDutyCycleMin=         XX:CMSIncrementalDutyCycle= XX: TraceClassUnloading ;        采用了sun推荐的参数 回收效果不好 照样有停顿 数小时之内就会频繁出现停顿 什么sun推荐的参数 照样不好使         六 JVM调优之递增式低暂停收集器        又叫什么火车式回收 完成 万request用时 秒 配置如下         $JAVA_ARGS = Dresin home=$SERVER_ROOT server        Xms M Xmx M Xmn M XX:PermSize= M        XX:MaxPermSize= M XX:MaxTenuringThreshold=         XX:GCTimeRatio= Xnoclassgc Xloggc:log/gc log        XX:+PrintGCDetails XX:+PrintGCTimeStamps XX:+UseTrainGC ;        该配置效果也不好 影响性能 所以没试         七 相比之下 还是并发回收比较好 性能比较高 只要能解决ParNewGC(并行回收年轻代)时的promotionfailed错误就一切好办了 查了很多文章 发现引起promotionfailed错误的原因是CMS来不及回收(CMS默认在年老代占到 %左右才会执行) 年老代又没有足够的空间供GC把一些活的对象从年轻代移到年老代 所以执行FullGC CMSInitiatingOccupancyFraction= 表示年老代占到约 %时就开始执行CMS 这样就不会出现FullGC了 SoftRefLRUPolicyMSPerMB这个参数也是我认为比较有用的 官方解释是softlyreachableobjectswillremainaliveforsomeamountoftimeafterthelasttimetheywerereferenced Thedefaultvalueisonesecondoflifetimeperfreemegabyteintheheap 我觉得没必要等 秒 所以设置成 配置如下        $JAVA_ARGS = Dresin home=$SERVER_ROOT server Xms M        Xmx M Xmn M XX:PermSize= M XX:MaxPermSize= M        XX:SurvivorRatio= XX:MaxTenuringThreshold=         XX:GCTimeRatio= Xnoclassgc XX:+DisableExplicitGC        XX:+UseParNewGC XX:+UseConcMarkSweepGC        XX:+CMSPermGenSweepingEnabled        XX:+UseCMSCompactAtFullCollection        XX:CMSFullGCsBeforeCompaction=         XX:+CMSClassUnloadingEnabled XX: CMSParallelRemarkEnabled        XX:CMSInitiatingOccupancyFraction=         XX:SoftRefLRUPolicyMSPerMB= XX:+PrintClassHistogram        XX:+PrintGCDetails XX:+PrintGCTimeStamps        XX:+PrintGCApplicationConcurrentTime        XX:+PrintGCApplicationStoppedTime        Xloggc:log/gc log ;        上面这个配置内存上升的很慢 小时之内几乎没有停顿现象 最长的只停滞了 s ParNewGC每 秒左右才执行一次 每次回收约 秒 看来问题应该暂时解决了 cha138/Article/program/Java/hx/201311/25923

相关参考

知识大全 经验分享 JVM调优方法总结

经验分享JVM调优方法总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-JVM调优

Java程序性能优化-JVM调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   JV

知识大全 JVM的垃圾回收机制详解和性能调优

JVM的垃圾回收机制详解和性能调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JVM的gc概

知识大全 jvm性能调优/垃圾回收器

  :新生代串行收集器(默认收集器)  算法复制算法  XX:+UseSerialGC指定使用新生代串行收集器和老年代串行收集器  优点效率高久经考验  缺点串行如果回收对象过多或者堆过大停顿时间会过

知识大全 JVM内存模型及垃圾收集策略解析(1)

JVM内存模型及垃圾收集策略解析(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一JVM内

知识大全 jvm学习:策略和保护域

  前面一节我们做了一个简单的实验来说明什么是策略文件在文章的最后也顺带的讲了一下什么是策略还有策略的作用  为了引出另外一个很重要的概念ProtectionDomain(保护域)所以我们还是要先来回

知识大全 JVM异常发生时的应对策略

JVM异常发生时的应对策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文向大家描述一下当J

知识大全 JVM内存模型及垃圾收集策略解析(2)

JVM内存模型及垃圾收集策略解析(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  二JAVA

知识大全 struts2项目性能调优三步曲(一)

  前一段时间有反映说是一个使用了struts的生产系统的页面显示速度太慢登录后发现确实如此于是进行了一番性能调优的研究和测试  一根据struts官方的性能调优说明进行了一些参数的修改  //str

知识大全 Java的垃圾回收机制详解和调优

Java的垃圾回收机制详解和调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JVM的gc概述