5

私は持っているコンテンツのインデックスを作成しています。Solr インスタンスを solr 4 にアップグレードした後、いくつかの OutOfMemories に直面しています。スローされる例外は次のとおりです。

INFO  org.apache.solr.update.UpdateHandler - start commit{flags=0,_version_=0,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false}
ERROR o.a.solr.servlet.SolrDispatchFilter - 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:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.OutOfMemoryError: Java heap space

既知のバグまたはそれを取り除くためにテストできるものはありますか?

このアップグレードでは、次の 2 つの点が変更されました。

  • solr バージョン (から3.4まで4.0);
  • lucene 一致バージョン (からLUCENE_34までLUCENE_40)。
4

2 に答える 2

6

一見すると、ログにアクセスするときにメモリが不足しているように見えます。もちろん、「メモリ不足」エラーがあるため、特に意味はないかもしれませんが、特にSOLR 4.0ロギングに関するこの苦情を見た後は、試してみる価値があります。特に、これがなんらかの形式のインデックスの再構築中、または更新の負荷が高いときに発生している場合はそうです。

したがって、更新ログを無効にしてみてください。これは、コメントアウトすることで実行できると思います。

<updateLog> 
  <str name="dir">${solr.data.dir:}</str> 
</updateLog> 

solrconfig.xml で。


編集:

これに対する別の (おそらくより良い) アプローチは、別の見方をすると、より頻繁にコミットすることかもしれません。更新ログの増大は、コミット待ちのキューに入れられた多数の更新に直接関係しているようです。

自動コミットを有効にしていない場合は、次のように構成に追加してみてください。

 <autoCommit> 
   <maxTime>15000</maxTime> 
   <openSearcher>false</openSearcher> 
 </autoCommit> 

このスレッドには、関連する議論と推奨事項がかなりあります。

于 2012-12-05T09:50:12.780 に答える
0

今日同じ問題に遭遇し、@femtoRgonの提案されたスレッドを読んだ後、solrconfig.xmlで次を変更しました

<autoCommit> 
  <maxTime>15000</maxTime> 
  <openSearcher>false</openSearcher> 
</autoCommit>

<autoCommit> 
  <maxDocs>15000</maxDocs> 
  <openSearcher>false</openSearcher> 
</autoCommit>

それはもはや私にそのエラーを与えません。したがって、15,000 ドキュメントごとにコミットされます。私の場合、これはメモリの問題に遭遇しないほど頻繁です。私の MacBook Pro では、製品情報を含む約 400 万件のドキュメント (非常に短いドキュメント) をインデックス化するのに数分かかりました。

于 2013-03-25T21:41:13.820 に答える