我在Apache Lucene中出现OutOfMemory错误。Apache Lucene中的OutOfMemory
这里的问题是代码:
DirectoryReader oldReader = directoryReader;
DirectoryReader newReader = DirectoryReader.openIfChanged(directoryReader);
if ((newReader != null) & (oldReader != newReader)) {
directoryReader = newReader;
}
这里是日志:
Caused by: java.lang.OutOfMemoryError: Java Heap Space
at java.lang.Class.getMethodImpl(Native Method)
at java.lang.Class.getMethod(Class.java:917)
at org.apache.lucene.store.MMapDirectory$MMapIndexInput$1.run(MMapDirectory.java:244)
at org.apache.lucene.store.MMapDirectory$MMapIndexInput$1.run(MMapDirectory.java:241)
at java.security.AccessController.doPrivileged(AccessController.java:327)
at org.apache.lucene.store.MMapDirectory$MMapIndexInput.freeBuffer(MMapDirectory.java:241)
at org.apache.lucene.store.ByteBufferIndexInput.close(ByteBufferIndexInput.java:295)
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:788)
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:694)
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:400)
at org.apache.lucene.index.StandardDirectoryReader.isCurrent(StandardDirectoryReader.java:349)
at org.apache.lucene.index.StandardDirectoryReader.doOpenNoWriter(StandardDirectoryReader.java:303)
at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:266)
at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:254)
at org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:170)
什么想法,有什么可以是问题?
我想既然3.3版本的Apache Lucene的使用MMapDirectory默认情况下,它给出最佳性能与其他两个实施子类相比。我没有更改默认块大小(对于64位JVM,1 GB),所以我不确定我应该如何调整块大小? –
您是否认为将ulimit更改为unlimited将防止OOM错误? –