Lucene 内存使用
Lucene Memory Usage
我正在为 ~250.000 个文档编制索引,但在大约 200.000 之后遇到了 OOME(在此之前,它变得非常慢,直到达到 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 问题,我有什么可能减少内存使用?我可以诊断冲洗发生的频率或类似情况吗?
正如 bastian 评论的那样,更新 JPype 解决了这个问题。该修复程序现在实际上已在 0.6.0 版本中发布。
此外,我在第三方组件中发生了内存泄漏,如果没有 Jpype 错误,我可能不会发现 ;-)
我正在为 ~250.000 个文档编制索引,但在大约 200.000 之后遇到了 OOME(在此之前,它变得非常慢,直到达到 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 问题,我有什么可能减少内存使用?我可以诊断冲洗发生的频率或类似情况吗?
正如 bastian 评论的那样,更新 JPype 解决了这个问题。该修复程序现在实际上已在 0.6.0 版本中发布。
此外,我在第三方组件中发生了内存泄漏,如果没有 Jpype 错误,我可能不会发现 ;-)