【问题标题】:Solr: java heap space continually growingSolr:java堆空间不断增长
【发布时间】:2014-02-07 18:47:45
【问题描述】:

我们有一个 Solr 服务器 (Solr 4.5),它为正在开发的项目设置了自定义架构和配置。现在我观察到,通过运行我们的集成测试,Solr 服务器的内存使用量不断增长。这些测试(JUnit)每个都将一组 100 条随机生成的记录发布到服务器,查询一下并删除它们。 删除策略设置为

<deletionPolicy class="solr.SolrDeletionPolicy">
  <str name="maxCommitsToKeep">1</str>
  <str name="maxOptimizedCommitsToKeep">0</str>
</deletionPolicy>

即使索引不再包含文档,也不会释放内存。每次运行测试都会增加一定数量的已用内存(大约 40 M,而索引本身大约是 7 k),直到整个服务器因 OutOfMemoryError 而死。

Solr 安装在 Tomcat 6.0.35.0 上运行,Java 1.7.0_17 和 -Xmx12g。操作系统是 Linux。

怎么可能?我在哪里可以调整 Solr 的内存处理?

【问题讨论】:

  • 您是否在 OOM 之前的日志中看到任何其他问题,例如甲板上的热搜索过多?您对 solrconfig 中不同缓存类型和缓存大小的预热计数是多少?这些会影响 solr 的 RAM 消耗。
  • 不,日志中只有一个警告(PERFORMANCE WARNING: Overlapping onDeckSearchers=2),没有错误,也没有我识别的其他提示。
  • 此警告意味着,您的提交将快速连续进行。每次提交都会触发搜索器预热。但是,如果您有多个搜索者在热身,其中一些人会白白浪费资源(CPU 和 RAM)。这里的常见补救措施是将预热计数设置为 0(主节点)或增加提交之间的延迟。
  • 好吧,当我禁用预热(通过将 usesColdSearcher 设置为 true 并从侦听器事件中删除预热查询。maxWarmingSearchers 设置为 2 时,内存增长仍然会发生。
  • JVM 的 -Xmx 参数值是多少?你的容器是什么?

标签: java memory solr


【解决方案1】:

看起来,我为测试机器设置了缓存值和 Xmx 太高,因为 java 进程占用的内存比分配给的内存多(开销)。随着尺寸的减小,Solr 现在可以稳定运行两天并运行大量单元测试(以前没有)。 测试场景(用随机值填充索引,然后完全清理它)用记录将缓存填充到最大值。似乎从索引中删除记录不一定会将其从缓存中删除...

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2021-02-22
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多