Java Lucene内存使用

Java Lucene内存使用,java,lucene,jpype,Java,Lucene,Jpype,我正在索引大约250000个文档,但在这之前,在大约200000个文档之后,它会变得非常缓慢,直到达到GC限制 代码如下所示,我正在使用jpype: def index_documents(self, documents): writer = IndexWriter(self.store, self.config) for document in documents: self.indexDocument(document,writer) writer.

我正在索引大约250000个文档,但在这之前,在大约200000个文档之后,它会变得非常缓慢,直到达到GC限制

代码如下所示,我正在使用jpype:

def index_documents(self, documents):
    writer = IndexWriter(self.store, self.config)
    for document in documents:
        self.indexDocument(document,writer)

    writer.commit()
    writer.close()

def indexDocument(self, document, writer):
    doc = Document()
    doc.add(Field('text',document['text'],TextField.TYPE_STORED))
    doc.add(Field('title',document['title'],TextField.TYPE_STORED))
    doc.add(Field('url',document['url'],StringField.TYPE_STORED))
    doc.add(Field('domain',document['domain'],StringField.TYPE_STORED))
    doc.add(Field('category',document['category'],StringField.TYPE_STORED))

    writer.addDocument(doc)

我希望文档和字段每隔一段时间就会被刷新,然后被垃圾收集,所以不可能碰到OOME。相反,似乎某个地方有漏洞。我怎样才能知道这是lucene还是jpype的问题?假设这是一个lucene问题,我有什么可能减少内存使用?我可以诊断刷新发生的频率或类似情况吗?

正如巴斯蒂安评论的那样,更新JPype解决了这个问题。该修复程序实际上是在版本0.6.0中发布的


此外,我在一个第三方组件中有一个内存泄漏,如果没有Jpype错误,我可能不会发现它-

看来需要冲洗的是作者。因为它是在所有文档处理完毕后才提交的,导致OOME。@Kayaman我对文档的理解有误吗?在我看来,在一定的内存使用/文档计数之后,刷新应该是自动的。您应该在上面运行jvisualvm,看看内存发生了什么。@Kayaman谢谢,我上次使用jvisualvm已经有一段时间了,我还没想到。我发现可能是我的第三方令牌过滤器泄漏了内存。JPype中有一个OOM问题,但尚未发布。请尝试当前的主机。