2017-06-06 6 views
0

私たちは4.0.0のバージョンではありますが、次の問題を解決した後、最新のバージョンに移行する予定です。 (あなたが入力すると示唆)だけでオートコンプリートフィールドの要求の後OutOfMemoryエラーのために、私たちのsolrが時々クラッシュして、メモリ不足(ファクシミリ)(自動完成)

SEVERE: null:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space 
    at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:469) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:297) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.OutOfMemoryError: Java heap space 
    at org.apache.lucene.search.FieldComparator$TermOrdValComparator.<init>(FieldComparator.java:1124) 
    at org.apache.lucene.search.SortField.getComparator(SortField.java:425) 
    at org.apache.lucene.search.FieldValueHitQueue$MultiComparatorsFieldValueHitQueue.<init>(FieldValueHitQueue.java:110) 
    at org.apache.lucene.search.FieldValueHitQueue.create(FieldValueHitQueue.java:173) 
    at org.apache.lucene.search.TopFieldCollector.create(TopFieldCollector.java:1123) 
    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:552) 
    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:507) 
    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:484) 
    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:309) 
    at si.amebis.termania.solr.ExternalSearch.search(ExternalSearch.java:307) 
    at si.amebis.termania.solr.ExternalSearch.handleRequestBody(ExternalSearch.java:235) 
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129) 
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1699) 
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:455) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:276) 
    ... 12 more 

私はTomcatのを見て、私は次のエラーが表示されるログ。リクエストの詳細は以下の通りです:

オートコンプリートフィールドは次のように定義されて
q - *:* 
start - 0 
rows - 0 
fq - (Type:1 OR Type:2) 
facet - true 
facet.limit - 20 
facet.mincount - 1 
facet.sort - true 
facet.prefix - "mi" 
facet.field - "Autocomplete" 
-- 
which returns 8105170 hits 

<field name="Autocomplete" type="grams" indexed="true" stored="false" omitNorms="true" required="False" multiValued="true" /> 
    <fieldtype name="grams" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory" /> 
     <filter class="solr.ShingleFilterFactory" maxShingleSize="10" outputUnigrams="true" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.TrimFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.TrimFilterFactory" /> 
     </analyzer> 
    </fieldtype> 

インデックスの詳細:

Num document: 4338603 
Index size: 10.1 Gb 
Ram: 64Gb (-Xmx45000M) 
Terms count in Autocomplete field: 70.459.723 

私はテキストフィールドにファセッティングと非常に多くの用語が多くを必要と仮定しますメモリの。

どのくらいのメモリが必要かを計算するにはどのようにすればいいですか?また、オートコンプリート(フレーズ - nグラム)を提供する効率的な方法はありますか?

ありがとうございます!

答えて

0

Solrインスタンスに接続してメモリがどこにあるかを確認できますか?私はそれがFieldCacheであると推測していますが、Solrのファセッティングは各フィールドを個別に扱うので、その特定のフィールドのメモリ消費量を確認できるはずです。あなたはこのスレッドをチェックすることができファセットクエリのメモリ使用量を推定するために(http://lucene.472066.n3.nabble.com/Solr-using-a-ridiculous-amount-of-memory-td4050840.html

はあなたのクエリが8105170ヒットを返しますが、あなたのインデックスのみ4338603文書を持っていることを言ったあなたの質問にも何かがあります。通常、テキストフィールドでの面取りは困難です。用語の数が本当に速くなる可能性があります。特に、帯状疱疹/ ngramを使用する場合は特にそうです。

をご覧ください。https://github.com/cominvent/autocompleteは、Solrに裏打ちされたオートコンプリート機能の優れた出発点です(これをいくつかのプロジェクトの出発点として使用しました)。

オートコンプリート機能の実装方法によっては、facet.methodhttps://cwiki.apache.org/confluence/display/solr/Faceting )のパラメータを変更し、役立つかどうかを確認することもできます。

https://cwiki.apache.org/confluence/display/solr/Suggesterもご覧ください。

関連する問題