我正在尝试在内存中加载整个Solr实例,我有6千万条记录,包含10个字段,(6个字段已编入索引,其中包含DateTime
,c_Text
和string
)。我在磁盘上的总solr实例大小为15 GB,我已将JVM内存设置为:
Initial Memory Pool: 2048 (2 GB)
Maximum Memory Pool: 20480 (20 GB)
我将solrconfig.xml
中的缓存配置更改为:
<documentCache class="solr.LRUCache"
size="6000000"
initialSize="2000000"
autowarmCount="0"/>
但是对于每次搜索它仍然从磁盘读取(通过Windows上的PerfMon实用程序检查)。同样在任务管理器中,它显示tomcat
占用500 MB的RAM。我已经看到了这个问题:Solr loads entire index into memory但它没有接受的答案,我也尝试根据该问题增加缓存大小,但它仍然没有增加tomcat
的内存使用量。 / p>
我正在使用Solr 4.4和Tomcat 7.0.42
答案 0 :(得分:2)
您可以使用RAMDirectory
将整个索引构建到RAM中。
这可以在你的solrconfig.xml
中完成<config>
<!-- ... -->
<directoryFactory name="DirectoryFactory"
class="org.apache.solr.core.RAMDirectoryFactory"/>
<!-- ... -->
</config>
然而,随着一切都在现场,这有利有弊。可以在SO问题Need to know pros and cons of using RAMDirectory中阅读详细的阐述。
然后,您应该考虑减少缓存的大小。