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的以下参数的最佳值和原因
- 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?