2012-03-15 39 views
2

Solrがメモリ不足例外を出しています。インデックスのサイズはおよそ30GBほどです。完全なインデックス作成は正常に完了しました。後でメモリ内の結果をロードしようとすると、この例外が発生し始める可能性があります。同じメモリがTomcatに割り当てられていて、別のサーバー上のsolr構成複製とまったく同じですが、完全に正常に動作しています。私はWindows上でJava & Tomcatを含む64ビットソフトウェアに取り組んでいます。インデックスサイズが小さくなると、完全に正常に動作します。割り当てられたTomcatのヒープスペースを増やすことを考えていましたが、まったく同じシステムとsolrの設定で別のサーバーがどうやって正常に動作していますか? ご協力いただければ幸いです。ここでSolrメモリ不足例外

はログです:

サーバが内部エラーSolrの構成で(重度のエラーが発生し、間違ったかもしれないものの詳細については、お使いのログファイルを確認してくださいあなたはSolrのは、設定エラーの後に続けたい場合は、。。 change:false in null --------------------------------------------- ---------------- java.lang.RuntimeException:java.lang.OutOfMemoryError:org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1068)のJavaヒープ領域org.apache.solr.core.SolrCore(SolrCore.java:579)at org.apache.solr.core.CoreContainer $ Initializer.initialize(CoreContainer.java:137)at org.apache.solr.servlet.SolrDispatchFilterにあります。 init(SolrDispatchFilter.java:83)at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java) :295)at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)at org.apache.catalina.core.ApplicationFilterConfig。(ApplicationFilterConfig.java:115)at org.apache.catalina.core.StandardContext .FilterStart(StandardContext.java:4072)at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)at org。 org.apache.catalina.startup.HostConfig.deployWAR(HostConfig。)のorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)のapache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) java:943)at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)at org.apache.catalina.startup .HostConfig.start(HostConfig.java:1317)at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)at org.apache.catalina.util.LifecycleSupport.fir eLifecycleEvent(LifecycleSupport.java:142)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)at org.apache .catalina.core.ContainerBase.start(ContainerBase.java:1057)at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)at org.apache.catalina.core.StandardService.start(StandardService.java) :525)at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)at org.apache.catalina.startup.Catalina.start(Catalina.java:595)at sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)。sun.reflect.NativeMethodAccessorImpl.invoke(不明なソース)at sun.reflect.DelegatingMethodAccessorImpl.invoke(不明なソース)at java.lang.reflect.Method.invoke(不明なソース)(org.apache.catalina.startup) org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)のBootstrap.start(Bootstrap.java:289)原因:java.lang.OutOfMemoryError:org.apache.luceneのJavaヒープスペース.index.SegmentTermEnum.termInfo(SegmentTermEnum.java:180)org.apache.lucene.index.TermInfosReader。(TermInfosReader.java:91)at org.apache.lucene.index.SegmentReader $ CoreReaders(SegmentReader.java:122) )org.apache.lucene.index.SegmentReader.get(SegmentReader.java:652)at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:613)at org.apache.lucene.index.DirectoryReader。 org.apache.lucene.index.ReadOnlyDirectoryReader。(ReadOnlyDirectoryReader.java:27)at org.apache.lucene.index.DirectoryReader $ 1.doBody(DirectoryReader.java:74)at org.apache。 org.apache.lucene.index.IndexReader.open(IndexReader。)でlucene.index.SegmentInfos $ FindSegmentsFile.run(SegmentInfos.java:683)をorg.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:69)にします。 java:476)at org.apache.lucene.index.IndexReader.open(IndexReader.java:403)at org.apache.solr.core.StandardIndexReaderFactory.newReader(StandardIndexReaderFactory.java:38)at org.apache.solr.core .SolrCore.getSea rcher(SolrCore.java:1057)at org.apache.solr.core.SolrCore(SolrCore.java:579)at org.apache.solr.core.CoreContainer $ Initializerにあります。org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:83)at initialize(CoreContainer.java:137)at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)at org.apache org.apache.catalina.core.ApplicationFilterConfig。(ApplicationFilterConfig.java:115)at。org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:ApplicationContext.java)にある.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) 4072)at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)at org.apache.catalina.core.ContainerBase .addChild(ContainerBase.java:779)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943)at org。 apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.ja va:504)org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)at org.apache.catalina.util .LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065))、この要求を満たすことができませんでした。

答えて

1

Tomcatをサービスとして実行すると、環境変数としてCATALINA_OPTSが設定されているとは思えないstartup.batを使ってコンソール/コマンドラインでtomcatを実行します。 次の問題の別の質問を投稿しました:Tomcat as a service v/s Tomcat on console for 64 bit Windows

2

私はあなたが他のOOMEの問題と同じこれを処理しなければならないと思う:

  • それはあなたのアプリケーションはいくつかのより多くのメモリを必要としていることかもしれない - 修正:JVM -Xmxを使用して増加の最大ヒープサイズオプション。

  • アプリケーションにメモリリークが発生している可能性があります。 (おそらくSolrで、おそらくあなたのコードで) - 修正:メモリプロファイラを使用して漏れを特定し修正します。


... but then how come on a different server with exactly same system and solr configuration it is working fine?

明らかに、彼らは同じではありません。何かが違うが、それが何であるか把握することはできない。 (でも、その違いが問題を解決する良い方法だとは思わないと思う)

+0

ありがとうStephan。実際問題はTomcatをサービスとして実行することに関連しています。私は別の質問を投稿します。 – Yavar

0

どのくらいのRAMがそのサーバーにありますか?

いずれにしても、SOLRプロセスのRSSをtopで調べましたか? topコマンドを実行し、M(大文字M)を押すと、メモリー使用量別にプロセスがソートされます。 「Resident Set」の列を見ると、データをロードしたり、さまざまなクエリを試したり、maxSegmentsのさまざまな数値を持つoptimizeを実行したりするときにSOLRが実際にどのくらい使用するかを確認できます。大きな数字から始めて、一度に約半分または三分の1ずつ下に向かって作業してください。あなたが定期的に新しい更新を取得するデータベースで合理的な3つのセグメントにそれを得ることができる場合。ここでの最適化に

詳細:http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22

0

両方のサーバーは、同じアプリケーションの再起動のプロファイルを持っていますか?

最近SOLRクライアントライブラリのMultiThreadedHttpClientManagerがReferenceQueueThreadを開始し、これが明示的にシャットダウンされない限り、アプリケーションクラスローダーが固定されて、SOLRを使用していたクライアントアプリケーションがクラスローダーをリークしていました。再起動後も再利用されます。

この条件の回避策は、破棄時にMultiThreadedHttpClientManager.shutdownAll()を呼び出すServletContextListenerを追加することです。