我们正在使用 Apache Solr 3.5 来驱动我们的网站目录搜索。我们使用具有多个分片的字段折叠功能,每个分片支持一个只读从属集群。
最近,我们在特定分片的所有从属服务器上遇到了内存不足错误。我们在特定字段上使用字段折叠,该字段在分片的所有文档上只有一个特定值,其从属服务器内存不足。有趣的是,Out of Memory 错误在一天中重复出现多次(24 小时内大约 4 次),而流量与正常情况没有任何显着偏差。在 16 Gb 机器上,分配给每个从属设备的最大堆大小为 8 Gb。
从那时起,我们做了以下事情,现在问题似乎已经解决了——
- 为导致从属组的问题添加了更多水平从属,我们将其从 3 个增加到 6 个。
- 我们已将复制轮询间隔从 5 分钟增加到 20 分钟。我们发现后台进程 SolrSearchIndexer.warm 正在消耗最大的堆空间量(大约 6 Gb),恰好是查询开始耗尽内存的时候。由于复制间隔会导致搜索者变暖,我们考虑增加频率。
- 我们已将该组的所有从属服务器上的 tomcat 最小堆分配减少到 1Gb。早些时候,这是 4Gb。
- 3 个有问题的从属服务器之一是在未使用的内核上出现 write.lock 异常。从那以后,我们删除了所有从属服务器上未使用的核心,因为它是从另一个主 Solr 复制的。未使用的核心有大约 150 万个文档,在磁盘上消耗了大约 605 Mb。
- 我们删除了所有从属服务器上的整个索引,并从头开始复制所有内容。顺便说一句,其中一个从属服务器在磁盘上的索引大小异常大 - 2.2 Gb,而其他从属服务器上的索引为 1 Gb。
问题分片上的索引目录的典型大小约为 1Gb,总共约 100 万个文档。每个从站平均处理的请求约为 10/秒。
我们已经尝试在测试环境中重放当天的整个日志,但不知何故,测试 solr 在相同的堆设置下永远不会出现内存不足。坦率地说,我们不确定这种情况不会再次发生。
有人可以建议这里可能是什么问题吗?任何帮助将不胜感激。
谢谢,
图沙尔