solr - java堆空间内存不足

时间:2011-03-10 14:00:22

标签: java tomcat exception solr

任何人都可以帮我找出tomcat中的错误原因。我在其中使用solr。开始工作正常。稍后我会提出这个错误。重新启动后它工作正常。请帮我找出错误。

  

2011年3月7日上午10:36:47 org.apache.solr.common.SolrException日志   SEVERE:java.lang.RuntimeException:java.lang.OutOfMemoryError:Java   堆空间   org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1068)at at   org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:418)     在   org.apache.solr.update.processor.RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:85)     在   org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:169)     在org.apache.solr.handler.XMLLoader.load(XMLLoader.java:69)at   org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:54)     在   org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)     在org.apache.solr.core.SolrCore.execute(SolrCore.java:1316)at at   org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:338)     在   org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241)     在   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)     在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)     在   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)     在   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)     在   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)     在   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)     在   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)     在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)     在   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)     在   org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:634)     在   org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:445)     在java.lang.Thread.run(未知来源)引起:   java.lang.OutOfMemoryError:Java堆空间

4 个答案:

答案 0 :(得分:17)

尝试增加记忆力

设置环境变量JAVA_OPTS="-Xms256m -Xmx500m",这意味着堆起始大小为256 MB,最大512 MB。或者编辑你的catalina.bat或.sh并在那里添加这一行。

你必须使用这些值,几周前我有一个SOLR索引器工作,大约2 GB的数据,需要700 MB堆。

答案 1 :(得分:3)

您可以尝试在dataSource定义中降低默认的batchSize JDBC连接参数 DataImportHandler旨在逐行传输行。它将获取大小值(默认值:500)传递给Statement#setFetchSize,而某些驱动程序则不会这样做。

如果你正在使用MsSQL,你可以添加dataSource param responseBuffering =“adaptive”。

有关详细信息,请参阅此处:
http://wiki.apache.org/solr/DataImportHandlerFaq

答案 2 :(得分:2)

使用-Xmx1024m或更大的值启动tomcat,为tomcat提供更多的堆空间。

答案 3 :(得分:1)

你一定要考虑调整你的JVM。首先,您应该更改JVM参数以发出垃圾收集日志,然后使用工具分析该日志。此分析将帮助您为堆选择合理的值,并且还可以让您判断是否确实存在内存泄漏或只是堆调整问题。有关GC分析工具的一些信息,请参阅此相关问题:

Analyze GC logs for Sun Hotspots, JVM 6