2012-12-05 13 views
5

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

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つの物事が変化し、このアップグレードの中で

:(3.4から4.0まで)

  • のSolrバージョン。 (LUCENE_34からLUCENE_40まで)。
+0

どのインフラストラクチャを使用していますか?データのサイズは?および構成の変更。原因Solrは、Solr 3.1からデフォルトでMMAPメモリ管理を使用します。これにより、メモリ不足の可能性もあります。 – Jayendra

+0

solr 3.4では5GBのインデックスがあり、Solr 3.4のディストリビューション設定では設定が行われていませんでしたが、Solr 4(設定変更なし)でも同じことが行われました –

答えて

6

ログにアクセスする際にメモリが不足しているように見えます。これは、特に「Out of Memory」エラーでは特に意味がないかもしれませんが、特にSOLR 4.0ロギングに関してthis complaintを見た後には価値があります。特に、ある形式のインデックスの再構築中にこれが発生している場合や、アップデートの負荷が大きい場合は特にそうです。

だから私はコメントアウトすることによって行うことができると信じ更新ログ、無効にしてみてください:solrconfig.xmlに

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

を。


EDIT:これまで

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

あなたが自動コミットが有効になっていない場合、あなたはあなたの設定でそれを追加しようとする場合がありますが、何かのように:

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

関連の議論や提言の良いビットがthis threadで発見することがあります。

+1

これは少し遅いかもしれませんが、 log4j.propertiesのレベルから警告だけで、solrと同じ問題が修正されました。あなたは少なくとも私の問題の原因に私をリード答えます。私のログファイルは巨大(600M)でした。ありがとう! – marsalal1014

0

私は今日、同じ問題に遭遇したとfemtoRgonの提案スレッド@読んだ後、私はそれはもはや私にそのエラーを与える

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

にsolrconfig.xml

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

に次のように変更していません。したがって、それは1万5,000のドキュメントをコミットします。私の場合、頻繁にメモリ問題に遭遇しないようにしています。私のMacBook Proでは、製品情報を含む〜4mのドキュメントを索引付けするのに数分かかりました(短いドキュメントなので)。