【问题标题】:DSE SOLR OOMingDSE SOLR OOMing
【发布时间】:2014-05-06 21:34:04
【问题描述】:

我们运行了一个 3 节点 DSE SOLR 集群,并且最近添加了一个新内核。经过大约一周的正常运行,所有 SOLR 节点现在都处于 OOMing 状态。填满 JVM 堆(设置为 8GB)和系统内存。然后也不断地将内存表刷新到磁盘。

集群是 DSE 3.2.5,RF=3

这是来自新核心的 solrconfig:

http://pastie.org/8973780

【问题讨论】:

    标签: solr cassandra datastax-enterprise


    【解决方案1】:

    相对于操作系统可用于缓存文件系统页面的系统内存量,您的 Solr 索引有多大。基本上,您的 Solr 索引需要适合 OS 文件系统缓存(DSE 启动后可用但尚未处理任何大量数据的系统内存量。)

    另外,每个节点上填充了多少个 Solr 文档(Cassandra 行)和多少个字段(Cassandra 列)?没有硬性限制,但 40 到 1 亿是一个很好的上限 - 每个节点。

    而且,如果您重新启动 DSE,但在您开始向服务器加载负载之前,有多少系统内存和多少 JVM 堆可用?

    【讨论】:

    • 如何检查 SOLR 索引大小?有3个核心,其中2个有大约3500万个文档和大约13个字段,另一个有大约6500万个文档和14个字段。我不确定如何在没有负载的情况下测试服务器,因为我无法阻止它进行写入。
    • 无论机器上的计算能力和内存如何,40-100m 是否是节点大小的上限?爱荷华使用更强大的机器不会有所作为吗?如果 40-100m 是上限,这是否意味着从 DSE Solr/C* 性能的角度来看,用更多磁盘空间制造许多功能较弱的机器是否有意义?
    • 这些都不是硬性限制 - 在您需要更加小心之前只是大致指导方针。有时更大更快的机器会有所帮助,但很多时候,更小的机器会更有帮助,因为 Solr 的计算和 I/O 密集型(如果索引不适合内存)。
    • 要获取 Solr 索引大小,请查看 cassandra/solr 目录。它只是一个节点上 Solr 的所有子目录的总和。
    • solr 索引大小(根据 cassandra/data/solr.data/ 计算)为 43G
    【解决方案2】:

    对于 RF=N,其中 N 是集群中的节点总数或至少是搜索数据中心,所有数据将存储在所有节点上,这对于较小的数据集可以,但对于较大的数据集则不行数据集。

    对于 RF=n,这意味着每个节点将有 X/N*n 行或文档,其中 X 是数据中心中所有列族的行或文档的总数。 X/N*n 是你应该尽量保持在 1 亿以下的数字。这不是硬性限制——一些数据集和硬件可能能够处理更多,而一些数据集和硬件甚至可能无法容纳那么多。您必须找到最适合您自己的应用的数字,但 4000 万到 1 亿的范围是一个好的开始。

    简而言之,最安全的估计是将 Solr 节点的 X/N*n 保持在 4000 万以下。对于某些数据集和更强大的硬件来说,100 可能就足够了。

    【讨论】:

      【解决方案3】:

      就调优而言,使用大量堆的一个常见来源是大量使用 Solr 构面和过滤器查询。

      一种技术是将“DocValues”字段用于构面,因为 DocValues 可以存储在堆外。

      过滤查询可以标记为 cache=false 以节省堆内存。

      此外,各种 Solr 缓存的大小可以减小甚至设置为零。在 solrconfig.xml 中。

      【讨论】:

        猜你喜欢
        • 2013-12-28
        • 2013-12-02
        • 2017-03-07
        • 1970-01-01
        • 2014-06-04
        • 2023-04-04
        • 2018-06-20
        • 2018-04-04
        • 2017-06-08
        相关资源
        最近更新 更多