Solr的索引问题(内存不足) - 寻找一个解决方案(Solr indexing issue (ou

2019-10-19 03:50发布

我有5000万页的文档大的指标。 在同一台机器(无分片)上所有正在运行。 我没有一个ID,让我来更新所需的文档,所以每次更新我必须删除整个索引和索引一切从头开始,只在最后提交的时候我完成了索引。

我的问题是,每隔几个指数运行,我用的Solr内存溢出异常,我与12.5 GB内存运行崩溃。 据我了解,直到提交一切都被保存在内存中,所以我在存储器中存储100M的文档,而不是50M。 我对吗? 但我不能做的提交,而我的索引,因为我删除了所有文档的开头和比我会是坏的部分指数运行。

是否有任何已知的解决方案? 可以分片解决,否则我仍然会有同样的问题? 是否有一个标志,请允许我软提交,但它不会改变指数,直至硬盘提交?

Answer 1:

您可以使用主从复制。 只要奉献一台机器做你的索引(主SOLR),然后,如果它的完成,你可以告诉从服务器从主计算机复制指数。 从机将下载新的指数,如果下载成功,将只删除旧索引。 因此,它是相当安全的。

http://wiki.apache.org/solr/SolrReplication

另一种解决方案,以避免这一切的复制建立是使用反向代理,把nginx的或类似的东西在你的Solr的前面。 使用一台机器用于索引新的数据,而另一个用于搜索。 你可以只是做反向代理总是在一个目前没有做任何索引点。

如果你做的其中之一,那么你可以经常只要你想提交。

而且因为它通常是一个坏主意,做索引和在同一个机器搜索,我会更喜欢使用主从溶液(别说你有50M的文档)。



Answer 2:

内存不足的错误可以通过你的容器JVM提供更多的内存来解决它无关,与你的缓存。 使用垃圾收集更好的选择,因为错误的来源是你的JVM内存已满。 增加线程的数量,因为如果达到一个进程的线程数的新的处理产卵(其具有相同数量的线程作为现有一个和同一存储器分配的)。

也请写CPU峰值,以及其他任何类型的,你的缓存机制正在使用

你可以尝试一件事这就是把所有自动预热至0,将加快提交时间

问候



文章来源: Solr indexing issue (out of memory) - looking for a solution