我有一个应用程序可以创建一个相当大的Solr 3.6索引,大约。 300GB的1B文档每天分为10个核心。索引工作得很好,我使用循环算法在核心之间均匀分布文档。搜索工作对我来说太棒了,直到返回结果集大于100K +文档。
此时,我收到一个java错误:OutOfMemoryError或SolrException:解析错误
我的搜索很简单,不使用通配符或排序或分面搜索,但它似乎在返回之前缓冲整个结果集。我服务器上的物理内存是256G,我正在运行Solaris 10.我使用的是32位的默认java,但也试过32位和64位的java 7.
当我使用64位java时,我能够增加最大内存足以返回带有-Xmx选项的1M +文档,但它实际上只需要一个Solr进程所需的所有内存。
除了使用数百个小索引重新设计我的应用程序之外,是否有人建议如何在没有大量RAM的情况下从Solr获取大型搜索结果集?
答案 0 :(得分:2)
您可以尝试停用各种caches(例如filterCache
,queryResultCache
和documentCache
)。这可能会影响性能,但可能会留出一些喘息的空间。
如果您的Solr HTTP / XML响应很大,您可以考虑使用placing Solr under the same JVM或甚至使用原始Lucene来节省XML开销。
除此之外,我担心你需要研究分片。