2

1740 冊の本から 50571 のドキュメントを含む Lucene インデックスがあります。このインデックスを作成する 2 つのプロセスがあります。最初のプロセスは、ドキュメントごとにデバイス ドキュメントにインデックスを作成することです。このプロセスは非常に遅いです。もう 1 つのプロセスは、サーバー上にブック インデックスを作成し (デバイス上で作成したのとまったく同じ方法で)、それをダウンロードしてマスター インデックスとマージすることです。これは、マスター インデックスを作成するのにはるかに高速です。インデックスの作成は、どちらの方法でも問題なく機能します。

問題は、download-merge インデックスをOutOfMemoryException検索すると . 私は本ごとに目次を調べて作成し (ダウンロード-マージ)、各本が索引付けされた後に検索しました。それに基づいて、〜450を予約すると、OutOfMemoryException.

メモリ不足の原因は何ですか。

4

1 に答える 1

2

Lucene はメモリ ホッグです。「マージ」インデックスを一緒に書き込むと、インデックスのセット全体がメモリに 2 回格納されます。lucene のドキュメントから引用したとおりです。

これには、すべての入力インデックス (開始インデックスを含む) の合計の 2 倍までの一時的な空き領域がディレクトリに必要であることに注意してください。リーダー/サーチャーが開始インデックスに対して開いている場合、必要な一時空き領域は開始インデックスのサイズだけ大きくなります。

それは多くの記憶です。forceMerge(int)これを軽減するには、インデックス ライターを呼び出してインデックスのサイズを縮小する必要があります。これは遅いプロセスですが、インデックスのサイズを縮小します。1インデックス ディレクトリに 50 個以上のファイルがあるたびに、引数を付けてこれを呼び出します。

于 2012-09-17T19:55:57.710 に答える