如何在Lucene的CompressingTermVectorsReader中修复OutOfMemoryError / AssertionError?

时间:2018-12-28 10:10:38

标签: lucene

我正在使用Lucene 7.2.1在64位平台上创建Lucene索引。

问题是,有时在合并触发后提交后,会收到OutOfMemoryError或AssertionError。

索引损坏是否有问题? 因此,readPositions正在读取不正确的高值。 了解什么可能导致这些错误以及可以采取哪些步骤来避免它会有所帮助。

详细信息:

我的索引大小很小(<100MB)。使用MMAP文件。

我不想增加堆大小(当前为1024 MB)

段的maxMerge大小已设置为100MB,因此Lucene不应尝试合并大于此大小的段。

合并策略:LogByteSizeMergePolicy

合并因子:4

OutOfMemoryError调用堆栈

java.lang.OutOfMemoryError: Failed to allocate 
    at org.apache.lucene.codecs.compressing.CompressingTermVectorsReader.readPositions(CompressingTermVectorsReader.java:637)
    at org.apache.lucene.codecs.compressing.CompressingTermVectorsReader.get(CompressingTermVectorsReader.java:432)
    at org.apache.lucene.codecs.compressing.CompressingTermVectorsWriter.merge(CompressingTermVectorsWriter.java:834)
    at org.apache.lucene.index.SegmentMerger.mergeVectors(SegmentMerger.java:224)
    at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:158)
    at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4443)
    at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4083)
    at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:2247)
    at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3471)
    at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3423)

断言错误调用堆栈

java.lang.AssertionError
org.apache.lucene.codecs.compressing.CompressingTermVectorsReader.get(CompressingTermVectorsReader.java:321)
org.apache.lucene.codecs.compressing.CompressingTermVectorsWriter.merge(CompressingTermVectorsWriter.java:834)
org.apache.lucene.index.SegmentMerger.mergeVectors(SegmentMerger.java:224)
org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:158)
org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4443)
org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4083)

0 个答案:

没有答案