solr-java堆空间内存不足

solr-java堆空间内存不足,java,tomcat,exception,solr,Java,Tomcat,Exception,Solr,有人能帮我找出tomcat中的错误原因吗。我在里面用solr。开始时效果很好。稍后我将提出这个错误。重新启动后,它工作正常。请帮我找出错误 2011年3月7日上午10:36:47 org.apache.solr.common.SolrException日志 严重:java.lang.RuntimeException:java.lang.OutOfMemoryError:java 堆空间位于 org.apache.solr.core.SolrCore.getSearcher(SolrCore.ja

有人能帮我找出tomcat中的错误原因吗。我在里面用solr。开始时效果很好。稍后我将提出这个错误。重新启动后,它工作正常。请帮我找出错误

2011年3月7日上午10:36:47 org.apache.solr.common.SolrException日志 严重:java.lang.RuntimeException:java.lang.OutOfMemoryError:java 堆空间位于 org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1068)位于 org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:418) 在 org.apache.solr.update.processor.RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:85) 在 org.apache.solr.handler.xmloader.processUpdate(xmloader.java:169) 位于org.apache.solr.handler.xmloader.load(xmloader.java:69) org.apache.solr.handler.ContentStreamHandlerBase.HandlerRequestBody(ContentStreamHandlerBase.java:54) 在 org.apache.solr.handler.RequestHandlerBase.HandlerRequest(RequestHandlerBase.java:131) 位于org.apache.solr.core.SolrCore.execute(SolrCore.java:1316) 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堆空间


用-Xmx1024m或更大的值启动tomcat,给tomcat更多的堆空间。

尝试增加内存

或者设置环境变量
JAVA_OPTS=“-Xms256m-Xmx500m”
,这意味着堆开始大小为256 MB,最大512 MB。或者编辑您的catalina.bat或.sh并在此处添加此行


您必须处理这些值,几周前我有一个SOLR indexer工作,需要大约2GB的数据和700MB的堆。

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


您可以尝试降低数据源定义中的默认batchSize JDBC连接参数。
DataImportHandler设计为逐行流式处理。它将fetch size值(默认值:500)传递给语句#setFetchSize,某些驱动程序不支持该语句

如果您使用的是MsSQL,则可以添加dataSource param responseBuffering=“adaptive”

有关更多信息,请参见此处:

这个问题与“C#”标记有什么关系?堆空间有多大?堆的使用可能没有问题,但堆可能太小。Ram大小为15.9 GB。增加堆的大小后,它也会抛出错误。。请帮忙。。提前感谢…在调整堆大小后,在索引我有16gb ram时也会抛出错误。。。我可以为maxiumit设置什么堆大小取决于您是否使用32位或64位jvm,以及您是否在windows或linux上运行。linux上的32位JVM通常受限于4gb进程上限,这意味着3gb是您可以分配给堆的所有内存。这在windows平台上进一步减少;1.2gb是32位windows的全部功能。64位JVM对于最大堆大小几乎是无限的,但是如果不相应地调整系统,对于真正大的堆,您将承受过多的GC时间。