我们正在使用Apache Solr 3.5来推动我们的网站目录搜索。我们使用具有多个分片的字段折叠功能,每个分片支持一组只读从属。
最近,我们在特定分片的所有从属上遇到了Out of Memory错误。我们在特定字段上使用字段折叠,该字段在分片的所有文档上只有一个特定值,其从属内存不足。有趣的是,内存不足错误在白天多次重复(24小时内约4次),而且没有任何明显的正常交通偏差。在16 Gb机器上分配给每个从站的最大堆大小为8 Gb。
从那时起,我们已经做了以下事情,现在这个问题似乎也被逮捕了 -
问题分片上索引目录的典型大小约为1Gb,总共大约有100万个文档。每个奴隶的平均请求量大约为10 /秒。
我们已经尝试在测试环境中重播当天的整个日志,但不知何故,测试solr永远不会因为相同的堆设置而耗尽内存。坦率地说,我们不确定这不会再发生。
有人可以在这里提出可能存在的问题吗?任何帮助将不胜感激。
谢谢,
Tushar
答案 0 :(得分:0)
我怀疑它涉及到缓存定义。您允许并行驻留的搜索者数量(默认为2但您可以更改)?搜索者热身实际上是一个缓存预热,所以如果你有一个工作的搜索者和一个温暖的搜索者,它占用两倍的内存大小。你使用什么缓存(文档/查询/过滤器/字段/自定义)?你是否广泛使用facet(他们在内部使用字段缓存)?许多不同的过滤查询(FQ)(再次,缓存位图)? 我认为字段折叠也使用字段缓存。
答案 1 :(得分:0)
自从发生这种情况以来它很安静,但我认为在这里分享原因是值得的。我们的网站被在查询中使用非常大的开始参数的人刮掉了。 Solr分布式索引对起始参数的大小有限制(超过500000)。当发生大量复制并且协调分片因为启动参数较高而已经从贡献节点传入大量内存中的文档时,就会发生内存不足。
详情可在此处找到 - https://wiki.apache.org/solr/DistributedSearch#Distributed_Searching_Limitations
我们的解决方案是将start参数设置为大约1000,因为人类很少超出列表的前几页。