Solr,OutOfMemoryErrors和堆未释放

时间:2018-09-03 16:05:59

标签: solr heap-memory

我有一个由三个Solr实例(9Gb堆)组成的SolrCloud,每个实例由一个专用主​​机(12Gb RAM)托管。

当前,我们拥有150多个百万文档,并且还在不断增长。有时我们会执行很多查询,我发现(我认为是)JVM中的一种奇怪行为:

Solr heap growth

在高原上,所有实例都升高了OutOfMemoryErrors,并且随着堆的上升,我观察到GC时间,我发现我认为几乎没有GC:

Solr JC times

我已将所有实例配置为使用GC1,并遵循了有关配置良好的Solr实例的堆的文档,但是我觉得这里确实有问题。

有人可以帮我理解为什么查询时没有GC发生的原因(可能是某些缓存调整或内存泄漏)吗?

预先感谢:)

1 个答案:

答案 0 :(得分:0)

好吧,以防万一有人遇到这个问题,这确实是我特定用途需要的某些缓存调整。

TL; DR:

调整我收藏中的filterCache就可以了! :D


我如何解决它:

  1. 通过监视问题发生的时间来标识(感谢Prometheus和Grafana!)
  2. 确定当时应用程序在做什么
  3. 试图在受控条件下重现行为
  4. 一旦我有能力随时触发问题,随着堆的增加,我每三分钟进行一次Solr JVM的堆转储
  5. 使用VisualVM,我分析了GC未清除哪些对象
  6. 所以我在引用对象中搜索了上一项的列表

所有这些可以找出FastLRUCache对象包含int[]个数组。谷歌搜索“ solr堆增长FastLRUCache”,我发现了this

因此,由于现在此集合中有2.5亿个文档,所以我要做的就是将filterCache设置从其原始512值调整到一个更低的数字,例如20大概。

希望这对以后的人有帮助。