【问题标题】:Load entire Solr Instance in memory在内存中加载整个 Solr 实例
【发布时间】:2013-12-01 22:02:00
【问题描述】:

我正在尝试将整个 Solr 实例加载到内存中,我有 6000 万条记录和 10 个字段,(索引了 6 个字段,其中 icn​​lude DateTimec_Textstring。我在磁盘上的总 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 的内存使用量。

我将 Solr 4.4 与 Tomcat 7.0.42 一起使用

【问题讨论】:

  • 你应该减少缓存的大小和Tomcat的最大内存。让操作系统负责缓存索引文件。最初,Solr 每次搜索都需要访问磁盘,但随着时间的推移,整个索引将被操作系统缓存(假设您有足够的空闲 RAM)。

标签: windows tomcat solr


【解决方案1】:

您可以使用RAMDirectory 将整个索引构建到 RAM 中。

这可以在你的 solrconfig.xml 中完成

<config>

    <!-- ... -->

    <directoryFactory name="DirectoryFactory" 
        class="org.apache.solr.core.RAMDirectoryFactory"/> 

    <!-- ... -->

</config>

但是,对于现场直播的所有内容,这都有优点和缺点。可以在 SO question Need to know pros and cons of using RAMDirectory 中阅读很好的阐述。

然后您应该考虑减小缓存的大小。

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多