OutOfMemoryError:启动solr时出现Java堆空间错误

OutOfMemoryError:启动solr时出现Java堆空间错误,java,jvm,solr,tomcat6,lucene,Java,Jvm,Solr,Tomcat6,Lucene,我开始用solr为DB文章编制索引,但在添加了大约5800万篇文章(和大约113GB大小的磁盘)之后,我在tomcat日志错误上得到下面的错误消息 注1:我已经将初始化内存池设置为256MB,将tomcat服务器的最大内存池设置为1400MB 注2:我可以发布或搜索文章,但必须等待3分钟以上才能得到回复 8-apr-2010 14:27:07 org.apache.solr.common.SolrException log SEVERE: java.lang.OutOfMemoryError:

我开始用solr为DB文章编制索引,但在添加了大约5800万篇文章(和大约113GB大小的磁盘)之后,我在tomcat日志错误上得到下面的错误消息

注1:我已经将初始化内存池设置为256MB,将tomcat服务器的最大内存池设置为1400MB
注2:我可以发布或搜索文章,但必须等待3分钟以上才能得到回复

8-apr-2010 14:27:07 org.apache.solr.common.SolrException log
SEVERE: java.lang.OutOfMemoryError: Java heap space
    at org.apache.lucene.util.PriorityQueue.initialize(PriorityQueue.java:89)
    at org.apache.lucene.search.HitQueue.<init>(HitQueue.java:67)
    at org.apache.lucene.search.TopScoreDocCollector.<init>(TopScoreDocCollector.java:113)
    at org.apache.lucene.search.TopScoreDocCollector.<init>(TopScoreDocCollector.java:37)
    at org.apache.lucene.search.TopScoreDocCollector$InOrderTopScoreDocCollector.<init>(TopScoreDocCollector.java:42)
    at org.apache.lucene.search.TopScoreDocCollector$InOrderTopScoreDocCollector.<init>(TopScoreDocCollector.java:40)
    at org.apache.lucene.search.TopScoreDocCollector.create(TopScoreDocCollector.java:100)
    at org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:979)
    at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:884)
    at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:341)
    at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:182)
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:195)
    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:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
    at java.lang.Thread.run(Unknown Source)
8-apr-2010 14:27:07 org.apache.solr.common.SolrException日志
严重:java.lang.OutOfMemoryError:java堆空间
位于org.apache.lucene.util.PriorityQueue.initialize(PriorityQueue.java:89)
位于org.apache.lucene.search.HitQueue(HitQueue.java:67)
位于org.apache.lucene.search.TopScoreDocCollector(topCoreDocCollector.java:113)
位于org.apache.lucene.search.TopScoreDocCollector(topCoreDocCollector.java:37)
在org.apache.lucene.search.topCoreDocCollector$InOrderTopScoreDocCollector上。(topCoreDocCollector.java:42)
在org.apache.lucene.search.topCoreDocCollector$InOrderTopScoreDocCollector.(topCoreDocCollector.java:40)
在org.apache.lucene.search.TopScoreDocCollector.create(TopScoreDocCollector.java:100)上
位于org.apache.solr.search.solrindexearcher.getDocListNC(solrindexearcher.java:979)
位于org.apache.solr.search.solrindexearcher.getDocListC(solrindexearcher.java:884)
位于org.apache.solr.search.solrindexearcher.search(solrindexearcher.java:341)
位于org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:182)
位于org.apache.solr.handler.component.SearchHandler.HandlerRequestBody(SearchHandler.java:195)
位于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:233)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
位于org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
位于org.apache.coyote.http11.http11aprotocol$Http11ConnectionHandler.process(http11aprotocol.java:574)
位于org.apache.tomcat.util.net.aprendop$Worker.run(aprendop.java:1527)
位于java.lang.Thread.run(未知源)
有什么问题吗

你有什么建议吗

重要问题:为什么solr使用堆内存?

  • 如果尚未升级到最新的jdk 6。我在JDK5上遇到了一个类似的OOME,它与6一起消失了。我怀疑是nio的事

  • 尝试降低solrconfig.xml中的maxPendingDeletes

  • 要了解solr的哪个组件正在耗尽所有内存,请按如下方式启动solr:

    java-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=your_选择的某个_目录-jar start.jar


  • 然后使用独立MAT从解析堆转储,并降低消耗所有内存的相应缓存。

    启用GC日志记录并绘制时间序列图,这可以告诉您JVM内存分配的速度,以及收集了多少内存(如果有的话),这样您就可以接近一个高水位。

    您是否尝试连接jconsole以更好地了解发生了什么?内存占用是否可以增加?您是否将索引的某些部分存储在内存中?如果答案是否定的,我想这是内存泄漏。尝试使用:jmap-histo查看什么类型的对象占据堆中比预期更大的部分。谢谢回复。我对java了解不多,也找不到jmap。仅在服务器上安装YourKit java profiler。如何找到问题所在?您使用什么索引文档?DataImportHandler?256到1,4 gig mb的内存对于SolrI来说并不多,只需安装windows 64位,为tomcat(solr)设置更大的内存,我的问题就解决了,因为段非常大,无法在内存较低的情况下打开。