solr jvm性能调优


solr jvm参数

  • -XX:NewRation=3(solr默认值,新生代与老年代内存比1:3)
  • -XX:SurvivorRatio=4(solr默认值, eden: from survivor: to survivor=4:1:1)
  • -XX:MaxTenuringThreshold=8(solr默认值,对象年龄计数器,MinorGc每存活一次加1)
  • -XX:+UseConcMarkSweepGC(CMS收集器也被称为短暂停顿并发收集器。它是对年老代进行垃圾收集的。CMS收集器通过多线程并发进行垃圾回收,尽量减少垃圾收集造成的停顿。)
  • -XX:+UseParNewGC(设置年轻代为多线程收集。可与CMS收集同时使用。在serial基础上实现的多线程收集器。如果该标志未设置,JVM会根据并行收集器中的-XX:ParallelGCThreads参数的值来计算出默认的并行CMS线程数。该公式是ConcGCThreads = (ParallelGCThreads + 3)/4。因此,对于CMS收集器, -XX:ParallelGCThreads标志不仅影响“stop-the-world”垃圾收集阶段,还影响并发阶段。)
  • -XX:ConcGCThreads=4(CMS周期的所有阶段都以4个线程来执行。尽管更多的线程会加快并发CMS过程,但其也会带来额外的同步开销。)
  • -XX:ParallelGCThreads=4(表示JVM在进行并行GC的时候,用于GC的线程数)
  • -XX:+CMSScavengeBeforeRemark(执行CMS remark之前进行一次youngGC,这样能有效降低remark的时间)
  • -XX:PretenureSizeThreshold=64m(对象超过64mb的时候,直接在old区分配)
  • -XX:+UseCMSInitiatingOccupancyOnly (使用手动定义初始化定义开始CMS收集,禁止hostspot自行触发CMS GC)
  • -XX:CMSInitiatingOccupancyFraction=50(使用cms作为垃圾回收
    使用70%后开始CMS收集,为了保证不出现promotion failed错误,该值的设置需要满足以下公式CMSInitiatingOccupancyFraction计算公式)
  • -XX:CMSMaxAbortablePrecleanTime=6000(JDK 5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX: CMSMaxAbortablePrecleanTime=5(单位为ms)来避免)
  • -XX:+PrintTenuringDistribution(打印对象年龄)

调优

线上发现"premature promotion"(过早提升),promotion failure”(提升失败: 即老年代空间不足以容乃 Minor GC 中提升上来的对象)大量的gc日志。

最终的调优结果是扩大堆内存,设置-XX:NewRation=1(扩大新生代内存)

参考

  • JVM实用参数(七)CMS收集器
  • 005 CMSScavengeBeforeRemark
  • JVM系列三:JVM参数设置、分析
  • 【原】java内存区域理解-初步了解
  • CMS垃圾回收器详解
  • jvm-对象年龄(-XX:+PrintTenuringDistribution)
  • JVM 调优 —— 新生代 Survivor 空间不足

你可能感兴趣的:(JVM)