本番環境の Solr で頻繁に OutOfMemoryError が発生

トピック作成者:ks-solruserml-bot (2024/05/23 13:02 投稿)
5
CloseClose

(The bot translated the original post https://lists.apache.org/thread/qtsvw97cm02xf7v8o6dpfjbgqsy7jf25 into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

同じデータ(それぞれ100GB)を含む4台の Solr サーバーがあります。
各サーバーの構成は以下の通りです:

  • Solr バージョン:6.5
  • RAM:96 GB
  • プロセッサ:14個
  • ディスクスペース:データフォルダ用に350GB

サーバーのリクエストレートは約20/秒です。

サーバーはかなり頻繁に OutOfMemory エラーが発生します。これは、レプリケーションが完了したとき(完全なレプリケーションではなく部分的なもの)や、リクエスト数が急増したときに発生します。

すべてのレプリケーションサイクルで OOM(OutOfMemory)が発生するわけではありませんが、時々発生します。

この原因を特定することができません。
何か助けになることがあれば、よろしくお願いします。

返信投稿者:ks-solruserml-bot (2024/05/23 13:02 投稿)

大量のグループクエリを行っていますか?膨大なデータスキャンが原因で、高いガベージコレクション(GC)活動が発生し、OOMエラーにつながることがあります。

返信投稿者:ks-solruserml-bot (2024/05/23 13:03 投稿)

はい、グループクエリを使用しています。

返信投稿者:ks-solruserml-bot (2024/05/23 13:03 投稿)

こんにちは、

クエリの例、キャッシュの設定、JVMのGC設定およびヒープサイズ、グルーピングフィールドのカーディナリティを教えていただけますか?

ありがとうございます、

Florin Babeş

返信投稿者:ks-solruserml-bot (2024/05/23 13:03 投稿)

こんにちは、Florin。

以下の情報を確認して、改善できる点があれば教えてください。

クエリの例

shards=good&mc1="190850"&mc3="190850A"&mc4="190850B"&mc5="190850LS"&mc6="190850SS"&mc7="190850P"&mc12="190850CA"&mcHigh=190850&mcHighA=190850&mcHighB=190850B&mcHighAB=190850&q=bags&ps=2&rows=14&group=true&group.limit=5&group.field=glid&group.ngroups=true&lat=0&lon=0&spellcheck=true&fq=wt:[0 TO 1299]&fq=-wt:(1259 1279 1289)&fq=id:(someids) OR ( titles:("imsw bags imsw") AND titles:("bagimsw") )&boost=map(query({!dismax qf=id v=$mc3 pf=""}),0,0,map(query({!dismax qf=id v=$mc4 pf=""}),0,0,map(query({!dismax qf=id mm=0 v=$mcHighA pf=""}),0,0,map(query({!dismax qf=id mm=0 v=$mcHighB pf=""}),0,0,map(query({!dismax qf=id v=$mc12 pf=""}),0,0,map(query({!dismax qf=id v=$mc1 pf=""}),0,0,1,1.1 ),2.0),80.0),105.0),175.0),250.0)&some more similar boosts

キャッシュ設定

<filterCache class="solr.FastLRUCache" size="4000" initialSize="2000" autowarmCount="100" />
<queryResultCache class="solr.LRUCache" size="30000" initialSize="1000" autowarmCount="100" />
<documentCache class="solr.LRUCache" size="25000" initialSize="512" autowarmCount="512" />

JVM GC 設定

-XX:CICompilerCount=4 -XX:ConcGCThreads=3 -XX:G1HeapRegionSize=8388608 -XX:GCLogFileSize=20971520 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=17179869184 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=17179869184 -XX:MaxNewSize=10301210624 -XX:MinHeapDeltaBytes=8388608 -XX:NumberOfGCLogFiles=9 -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:ThreadStackSize=256 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC -XX:+UseGCLogFileRotation

ヒープサイズ
16GB

グルーピングフィールドのカーディナリティ
グループフィールドのカーディナリティは約620万です。

返信投稿者:ks-solruserml-bot (2024/05/23 13:04 投稿)

あなたのクエリには特に問題は見当たりません。改善が見られるかどうか、グループの代わりに `collapsingQParser` と `expand` を使用してみることをお勧めします。また、キャッシュのメモリ使用量を確認し、エビクションやヒット率をチェックしてください。キャッシュがそれほど大きくなくても良いかもしれません。特にドキュメントキャッシュを確認してください。ドキュメントには以下のように記載されています:

「ドキュメントキャッシュのサイズは、常に max_results 倍の max_concurrent_queries よりも大きくする必要があります。これにより、Solr がリクエスト中にドキュメントを再取得する必要がなくなります。ドキュメントに保存するフィールドが多いほど、このキャッシュのメモリ使用量が増加します。」

また、OOMの前のGCログを共有していただけますか?

ありがとうございます。

Florin Babeş

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?