【问题标题】:Solr, OutOfMemoryErrors and heap not freedSolr、OutOfMemoryErrors 和堆未释放
【发布时间】:2018-09-03 16:05:59
【问题描述】:

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

目前,我们有一个包含 150+ 百万个文档的集合,并且还在不断增长。有时我们会做很多查询,我看到(我认为是)JVM 中的一种奇怪行为:

Solr heap growth

在高原上,所有实例都引发了OutOfMemoryErrors,当我观察到堆增加时的 GC 时间时,我发现我认为几乎没有 GC:

Solr JC times

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

有人可以帮我理解为什么在进行查询时似乎没有发生 GC(可能是一些缓存调整或内存泄漏)?

提前致谢:)

【问题讨论】:

    标签: solr heap-memory


    【解决方案1】:

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

    TL;DR:

    调整我收藏中的filterCache 就成功了! :D


    我是如何排除故障的:

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

    所有这些都是为了找出 FastLRUCache 对象包含int[] 数组。谷歌搜索“solr heap growth FastLRUCache”我发现this

    所以,现在我们在这个集合中有 2.5 亿个文档,我所要做的就是将 filterCache 设置从其原始 512 值调整为一个低得多的数字,例如 20 左右。

    希望这对将来的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 2017-09-18
      • 2020-09-30
      • 2016-07-25
      • 1970-01-01
      • 2018-06-01
      • 2017-07-06
      • 2016-03-06
      相关资源
      最近更新 更多