我们已经运行了一个3节点的DSE SOLR集群,并且最近添加了一个新的核心。经过大约一周的正常运行后,所有的SOLR节点现在都是OOMing。这会填满JVM堆(设置为8 8GB)和系统内存。然后还会不断地将内存刷新到磁盘。
该群集是带有RF=3的DSE 3.2.5
下面是来自新内核的solrconfig:
http://pastie.org/8973780
发布于 2014-03-28 02:55:11
相对于操作系统可用来缓存文件系统页的系统内存量,Solr索引有多大。基本上,您的Solr索引需要适合OS文件系统缓存( DSE启动后可用的系统内存量,但尚未处理任何大量数据)。
另外,每个节点上填充了多少个Solr文档(Cassandra行)和多少个字段(Cassandra列)?没有硬性限制,但作为每个节点的上限,4000万到1亿是一个很好的指导方针。
而且,如果重新启动DSE,但在开始加载服务器之前,有多少系统内存和多少JVM堆可用?
发布于 2014-04-01 01:14:38
对于RF=N,其中N是集群或至少是搜索数据中心中的节点总数,所有数据都将存储在所有节点上,这对于较小的数据集是可以的,但对于较大的数据集则不是很好。
对于RF=n,这意味着每个节点将有X/N*n行或文档,其中X是数据中心中所有列族的总行或文档数量。X/N*n是您应该尽量保持在1亿以下的数字。这不是一个硬限制-一些数据集和硬件可能能够处理更多,而一些数据集和硬件可能甚至无法容纳那么多。你必须发现最适合你自己的应用程序的数字,但4000万到1亿的范围是一个很好的开始。
简而言之,最安全的估计是将Solr节点的X/N*n保持在4000万以下。对于某些数据集和更强大的硬件,100可能就足够了。
发布于 2014-04-01 06:56:00
就调优而言,使用大量堆的一个常见来源是大量使用Solr facet和过滤器查询。
一种技术是对facet使用" DocValues“字段,因为DocValues可以在堆外存储。
过滤器查询可以标记为cache=false,以节省堆内存。
此外,可以减小各种Solr缓存的大小,甚至将其设置为零。这是在solrconfig.xml中。
https://stackoverflow.com/questions/22695615
复制相似问题