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

Solr7.7升级后堆内存100%占用崩溃,同配置Solr6.6无GC问题,求故障诱因

Solr 6.6升级7.7 GC异常崩溃可能原因

堆内存快照中Term、BytesRef、PhraseQuery三类实例合计占用超过7G堆内存,是GC异常的直接诱因,对应根因如下:

  • 缓存策略版本不兼容:Solr 7.7使用的Lucene 7.x内核重构了查询缓存实现,默认会缓存全量Term关联的查询对象,6.6版本的缓存配置(queryCache、filterCache的大小、条目上限)直接复用会导致缓存溢出,大量实例长期驻留老年代,无法被年轻代GC回收,最终触发长时间STW的Full GC。
  • 短语查询处理逻辑变更:Solr 7.x对多词短语查询的分词匹配逻辑做了调整,相同查询语句会生成数倍于6.6版本的Term实例,旧配置中没有限制短语查询的最大词数,大量临时生成的Term、BytesRef对象来不及被GC回收就晋升到老年代,快速占满老年代空间。
  • 默认参数适配问题:Solr 7.7默认开启的查询缓存预热、排序查询自动转过滤器逻辑,会重复生成大量BooleanClause实例;同时7.x版本的更新日志默认配置的VersionBucket数量是6.6的3倍以上,堆快照中137万+VersionBucket实例额外占用大量老年代内存,进一步加剧内存紧张。
  • JVM参数适配问题:使用的JDK 11.0.5默认G1GC配置对Solr这类短生命周期大对象密集的场景适配不佳,对象晋升老年代的阈值过低,本应在年轻代回收的临时查询对象直接进入老年代,加速老年代内存耗尽。
快速验证调整建议
  • 替换缓存配置为Solr 7.7官方默认的缓存参数,将queryCache、filterCache的最大条目数下调为原有配置的60%,重启后观察GC指标
  • 开启慢查询日志,限制单条查询的短语最大长度,避免超长短语查询生成海量Term实例
  • 调整JVM参数,将-XX:MaxTenuringThreshold调整为15,年轻代内存占比提升至总堆的40%,减少临时对象进入老年代的概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:03