SOLR 4.1内存不足错误提交了几千个Solr文档后

我们正在测试使用以下选项在tomcat 7和java 7中运行的solr 4.1

JAVA_OPTS =“ - Xms256m -Xmx2048m -XX:MaxPermSize = 1024m -XX:+ UseConcMarkSweepGC -XX:+ CMSIncrementalMode -XX:+ ParallelRefProcEnabled -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = / home / ubuntu / OOM_HeapDump”

我们的源代码如下所示:

/**** START *****/
int noOfSolrDocumentsInBatch = 0;
for(int i=0 ; i<5000 ; i++) {
    SolrInputDocument solrInputDocument = getNextSolrInputDocument();
    server.add(solrInputDocument);
    noOfSolrDocumentsInBatch += 1;
    if(noOfSolrDocumentsInBatch == 10) {
        server.commit();
        noOfSolrDocumentsInBatch = 0;
    }
}
/**** END *****/

“getNextSolrInputDocument()”方法生成一个包含100个字段(平均值)的solr文档。 大约50个字段是“text_general”类型。 一些“test_general”字段由大约1000字剩余字组成。 总字段的Ouf大约有35-40个多值字段(不是“text_general”类型)。

我们索引所有的字段,但只存储8个字段。 在这8个字段中,有两个是字符串类型,五个长,一个是布尔型。 所以我们的索引大小只有394 MB。 但OOM时间占用的RAM大约为2.5 GB。 即使索引尺寸很小,为什么内存如此之高? 内存中存储了什么? 我们的理解是,在每次提交文档都被刷新到磁盘之后,因此在提交后没有任何内容应该保留在RAM中。

我们正在使用以下设置:

server.commit() set waitForSearcher=true and waitForFlush=true
solrConfig.xml has following properties set:
directoryFactory = solr.MMapDirectoryFactory
maxWarmingSearchers = 1
text_general data type is being used as supplied in the schema.xml with the solr setup.
maxIndexingThreads = 8(default)
<autoCommit>
    <maxTime>15000</maxTime>
    <openSearcher>false</openSearcher>
</autoCommit>

在提交大约3990个solr文档后,我们得到了Java堆内存不足错误。从Profiler中内存转储的一些快照将在以下链接上传。
http://s9.postimage.org/w7589t9e7/memorydump1.png
http://s7.postimage.org/p3abs6nuj/memorydump2.png

有人可能会建议我们应该怎么做,以尽量减少/优化我们的情况下的内存消耗的原因? 还建议什么应该是solrConfig.xml的以下参数的最佳值和原因

- useColdSearcher - 真/假?
- maxwarmingsearchers-数字 - 拼写检查开/关?
- omitNorms =真/假?
- omitTermFreqAndPositions?
- mergefactor? 我们使用默认值10
- Java垃圾收集调优参数?
链接地址: http://www.djcxy.com/p/92503.html

上一篇: SOLR 4.1 Out Of Memory error After commit of a few thousand Solr Docs

下一篇: How to fix w3wp.exe errors after windows 7 and 8.1 updates of August 12th 2015?