You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Solr节点GC频繁且耗时过长,恳请优化建议

Apache Solr GC频繁且耗时过长的优化方案

环境与问题概述

  • 集群规模:6个节点,单节点配置为8核CPU、32GB内存
  • 当前问题:GC运行过于频繁,且单次GC耗时久,影响Solr服务性能

当前Solr Java配置

-DSTOP.KEY=solrrocks
-DSTOP.PORT=7983
-Dhost=10.0.140.240
-Djetty.home=/opt/solr/server
-Djetty.port=8983
-Dlog4j2.formatMsgNoLookups=true
-Dnewrelic.environment=production-v2
-Dsolr.data.home=
-Dsolr.default.confdir=/opt/solr/server/solr/configsets/_default/conf
-Dsolr.documentCache.initialSize=8339
-Dsolr.documentCache.size=8339
-Dsolr.filterCache.initialSize=8339
-Dsolr.filterCache.size=8339
-Dsolr.install.dir=/opt/solr
-Dsolr.jetty.inetaccess.excludes=
-Dsolr.jetty.inetaccess.includes=
-Dsolr.log.dir=/var/solr/data/logs
-Dsolr.log.muteconsole
-Dsolr.queryResultCache.initialSize=6671
-Dsolr.queryResultCache.size=6671
-Dsolr.solr.home=/var/solr/data/data
-Duser.timezone=UTC
-DzkClientTimeout=30000
-DzkHost=ip-10-0-12-249.ap-south-1.compute.internal:2181,ip-10-0-12-250.ap-south-1.compute.internal:2181,ip-10-0-12-251.ap-south-1.compute.internal:2181/solr
-XX:+AggressiveOpts
-XX:+AlwaysPreTouch
-XX:+ParallelRefProcEnabled
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-XX:+PrintTenuringDistribution
-XX:+UseG1GC
-XX:+UseGCLogFileRotation
-XX:+UseLargePages
-XX:-OmitStackTraceInFastThrow
-XX:-OmitStackTraceInFastThrow
-XX:ConcGCThreads=4
-XX:G1ReservePercent=10
-XX:GCLogFileSize=20M
-XX:InitiatingHeapOccupancyPercent=80
-XX:MaxGCPauseMillis=100
-XX:MaxTenuringThreshold=8
-XX:NewRatio=3
-XX:NumberOfGCLogFiles=9
-XX:OnOutOfMemoryError=/opt/solr/bin/oom_solr.sh 8983 /var/solr/data/logs
-XX:ParallelGCThreads=4
-XX:PretenureSizeThreshold=64m
-XX:SurvivorRatio=4
-Xloggc:/var/solr/data/logs/solr_gc.log
-Xms23862m
-Xmx23862m
-Xss256k
-javaagent:/opt/solr/contrib/newrelic/newrelic.jar
-verbose:gc

优化建议

1. G1GC核心参数调整

  • 降低InitiatingHeapOccupancyPercent(IHOP):当前设置为80,G1在堆占用80%时才启动并发标记,易导致后续触发Full GC。建议调整为40-50,让G1更早启动并发回收,避免堆内存耗尽。
  • 调整MaxGCPauseMillis:当前设为100ms,若实际场景无法达到,会迫使G1频繁调整新生代大小,加剧GC频率。建议根据业务容忍度调整为200-300ms,给G1更合理的回收空间。
  • 优化新生代比例:当前NewRatio=3意味着新生代占堆的1/4(约6G),Solr作为查询密集型服务,适当增大新生代可减少Minor GC频率。建议改为-XX:NewRatio=2(新生代占1/3,约8G),或直接用-XX:MaxNewSize=8G -XX:NewSize=8G固定新生代大小,避免动态调整的波动。
  • 调整GC线程数:单节点8核,当前ConcGCThreads=4、ParallelGCThreads=4,线程数过高会占用过多CPU影响业务。建议设置为:-XX:ParallelGCThreads=6(并行GC线程数取CPU核心数的75%),-XX:ConcGCThreads=2(并发线程数取并行线程数的1/3左右)。

2. 堆内存与缓存优化

  • 提升堆内存预留比例:当前G1ReservePercent=10,预留空间不足可能导致对象晋升失败触发Full GC。建议提升至15-20,增加内存缓冲。
  • 优化Solr缓存配置:当前documentCache、filterCache大小均为8339,queryResultCache为6671,需结合实际查询热度调整。通过Solr Admin的Cache页面查看缓存命中率,若命中率低于90%,适当增大缓存大小;若命中率高但内存压力大,可设置solr.documentCache.softReferences=true,让缓存对象在内存不足时被回收。

3. 其他参数优化

  • 移除重复参数:配置中重复出现-XX:-OmitStackTraceInFastThrow,删除其中一条即可。
  • 关闭AggressiveOpts:该参数为早期JVM激进优化,在JDK8+中已不推荐,可能引入不稳定因素,建议移除-XX:+AggressiveOpts。
  • 验证LargePages配置:-XX:+UseLargePages需要系统层面支持,若未正确配置则会失效,建议检查系统大页配置,未配置则移除该参数。

内容的提问来源于stack exchange,提问作者Rajat Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:52:43