2

かなり大きな Solr 3.6 インデックスを作成するアプリケーションがあります。毎日 10 コアに分割された 10 億のドキュメントで 300 GB。インデックス作成はうまく機能し、ラウンド ロビン アルゴリズムを使用してドキュメントをコア間で均等に分散しています。返される結果セットが 10 万以上のドキュメントになるまで、検索は私にとってもうまく機能します。

その時点で、次の Java エラーが返されます: OutOfMemoryError または SolrException: parsing error

私の検索は単純で、ワイルドカード、並べ替え、またはファセット検索を使用していませんが、結果セット全体をバッファリングしてから返すようです。サーバーの物理メモリは 256G で、Solaris 10 を実行しています。32 ビットのデフォルトの Java を使用していますが、32 ビットと 64 ビットの Java 7 も試しました。

64 ビットの Java を使用すると、–Xmx オプションを使用して 1M 以上のドキュメントを返すのに十分な最大メモリを増やすことができますが、1 つの Solr プロセスだけで実質的にすべてのメモリが必要になります。

何百もの小さなインデックスを使用してアプリケーションを再設計する以外に、大量の RAM を使用せずに Solr から大規模な検索結果セットを取得する方法について誰か提案がありますか?

4

1 に答える 1

2

さまざまなキャッシュ( filterCachequeryResultCache、 など) を無効にしてみてくださいdocumentCache。これにより、パフォーマンスが低下する可能性がありますが、息抜きのスペースができる可能性があります。

Solr HTTP/XML 応答が大きい場合は、Solr を同じ JVM の下に配置するか、生の Lucene を使用して XML オーバーヘッドを節約することを検討できます。

それ以外は、シャーディングを検討する必要があると思います。

于 2012-12-26T22:52:54.213 に答える