2011-03-10 79 views
13

任何人都可以幫助我找出tomcat中的錯誤原因。我正在使用solr。開始它工作正常。後來我會提出這個錯誤。重新啓動後,它工作正常。請幫我找出錯誤。solr - 內存不足的java堆空間

Mar 7, 2011 10:36:47 AM org.apache.solr.common.SolrException log SEVERE: java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1068) at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:418) at org.apache.solr.update.processor.RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:85) at org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:169) at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:69) at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:54) at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131) at org.apache.solr.core.SolrCore.execute(SolrCore.java:1316) at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:338) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241) 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:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.OutOfMemoryError: Java heap space

+0

這是什麼問題都用「C#」的標籤呢? – LukeH 2011-03-10 14:05:11

+0

堆空間有多大?堆使用可能沒問題,但堆可能太小了。 – Thomas 2011-03-10 14:06:45

+0

Ram的大小是15.9 GB.After增加堆的大小也會引發錯誤..請幫助..先謝謝... – 2011-03-30 14:27:57

回答

14

儘量增加你的記憶

任一組變量JAVA_OPTS="-Xms256m -Xmx500m"環境,這意味着堆開始大小爲256 MB,最大512 MB。或編輯你的catalina.bat或.sh並在那裏添加這一行。

你必須玩弄這些值,幾周前我有一個SOLR索引器的工作,大約2 GB的數據,700MB的堆是必需的。

2

用-Xmx1024m或更大的值啓動tomcat以給tomcat更多的堆空間。

0

你一定要考慮調整你的JVM。首先你應該改變你的JVM參數來發出一個垃圾回收日誌,然後使用一個工具來分析這個日誌。這個分析將幫助你爲你的堆選擇合理的值,並且它還可以讓你判斷你是否真的有內存泄漏或只是堆調整問題。看到此相關的問題對GC分析工具的一些信息:

Analyze GC logs for Sun Hotspots, JVM 6

+0

調整堆大小後,它也會引發錯誤 – 2011-03-30 14:27:25

+0

即時通訊16gb內存...什麼堆大小可以設置爲maxium – 2011-04-06 14:16:37

+1

這取決於您是否使用32位或64位jvm,以及如果您在Windows或Linux上運行。 Linux上的32位jvms通常受限於4gb進程上限,這意味着3gb就是您可以分配給堆的所有內容。這在Windows平臺上進一步降低; 1.2gb是關於你所能做的32bit窗口。 64位jvms對於最大堆大小几乎是無限的,但是除非您相應地調整系統,否則對於真正的大堆,您將忍受過多的GC時間。 – 2011-04-07 22:10:39

3

您可以嘗試在你的數據源定義降低默認BATCHSIZE JDBC連接PARAM。
DataImportHandler設計爲逐行地流式傳輸。它將一個獲取大小值(默認值:500)傳遞給Statement#setFetchSize,這是一些驅動程序不尊重的。

如果您使用的是MsSQL,您可以添加dataSource參數responseBuffering =「adaptive」。

這裏看到更多的信息:
http://wiki.apache.org/solr/DataImportHandlerFaq

+0

我不使用jdbc ..我們直接對數據進行索引..... – 2011-03-30 14:32:20