solr – java堆空间内存不足
任何人都可以帮我找出tomcat中的错误原因。 我正在使用solr。 开始工作正常。 稍后我会提出这个错误。 重新启动后它工作正常。 请帮我找出错误。
2011年3月7日上午10:36:47 org.apache.solr.common.SolrException log SEVERE:java.lang.RuntimeException:java.lang.OutOfMemoryError:org.apache.solr.core.SolrCore.getSearcher中的Java堆空间( SolrCore.java:1068)org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:418)atg.apache.solr.update.processor.RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:85)atg.apache位于org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java)的org.apache.solr.handler.XMLLoader.load(XMLLoader.java:69)中的.solr.handler.XMLLoader.processUpdate(XMLLoader.java:169) :54)org.apache.solr.handle.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)位于org.apache.solr.servlet的org.apache.solr.core.SolrCore.execute(SolrCore.java:1316)。 SolrDispatchFilter.execute(SolrDispatchFilter.java:338)位于org.apache.catalina.core.ApplicationFilterCha的org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)中的or.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)at 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。 http://www.Http11Processor.process(Http11Processor.java:844)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)引起:java.lang.OutOfMemoryError:Java堆空间
尽量增加你的记忆力
设置环境变量JAVA_OPTS="-Xms256m -Xmx500m"
,这意味着堆起始大小为256 MB,最大512 MB。 或者编辑你的catalina.bat或.sh并在那里添加这一行。
您必须使用这些值,几周前我有一个SOLR索引器工作,大约2 GB的数据,需要700 MB的堆。
您可以尝试在dataSource定义中降低默认的batchSize JDBC连接参数。
DataImportHandler旨在逐行流式传输。 它将获取大小值(默认值:500)传递给Statement#setFetchSize,而某些驱动程序则不遵守这些值。
如果你正在使用MsSQL,你可以添加dataSource param responseBuffering =“adaptive”。
有关详情,请参阅此处:
http://wiki.apache.org/solr/DataImportHandlerFaq
使用-Xmx1024m或更大的值启动tomcat以给tomcat更多的堆空间。
你一定要考虑调整你的JVM。 首先,您应该更改JVM参数以发出垃圾收集日志,然后使用工具分析该日志。 此分析将帮助您为堆选择合理的值,并且还可以让您判断是否确实存在内存泄漏或只是堆调整问题。 有关GC分析工具的一些信息,请参阅此相关问题:
分析Sun Hotspots,JVM 6的GC日志
- 既不是BindingResult也不是普通的目标对象……例外
- 为什么不捕获Exception catch RuntimeException?
- 系统exception与应用程序exception的明确说明
- org.hibernate.exception.GenericJDBCException:无法执行查询
- java.lang.IllegalStateException:在servlet中提交响应后无法转发
- 在struts xml中声明/处理哪些exception
- 在编写字符串时,如何调试导致转换错误的xml对象?
- AutoCloseable的close方法抛出exception是否有意义? 应如何处理?
- 如何调试ConcurrentModificationException?