首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OutOfMemory与Solr4

OutOfMemory与Solr4
EN

Stack Overflow用户
提问于 2012-12-05 09:20:44
回答 2查看 3.9K关注 0票数 5

我正在索引我拥有的内容,在将我的Solr实例升级到solr 4之后,我将面临一些OutOfMemories。引发的例外情况是:

代码语言:javascript
复制
INFO  org.apache.solr.update.UpdateHandler - start commit{flags=0,_version_=0,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false}
ERROR o.a.solr.servlet.SolrDispatchFilter - null:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
        at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:469)
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:297)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.OutOfMemoryError: Java heap space

有没有什么已知的bug或者什么我可以测试的东西来摆脱它?

在这次升级过程中,有两件事发生了改变:

  • solr版本(从3.44.0);
  • lucene匹配版本(从LUCENE_34LUCENE_40)。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-05 09:50:12

在访问日志时,似乎内存不足,一目了然。当然,这可能不是特别有意义的,因为出现了“内存不足”错误,但值得一试,特别是在看到有关Solr4.0日志记录的本诉状之后。特别是如果在某种形式的索引重建过程中发生这种情况,或者在大量更新时发生这种情况。

因此,尝试禁用更新日志,我认为可以通过注释来实现:

代码语言:javascript
复制
<updateLog> 
  <str name="dir">${solr.data.dir:}</str> 
</updateLog> 

在solrconfig.xml中。

编辑:

另一种(可能更好)的方法,再看一看,可能是更频繁地提交。更新日志的增长似乎与大量排队更新等待提交直接相关。

如果尚未启用自动提交,则可能需要尝试将其添加到配置中,如下所示:

代码语言:javascript
复制
 <autoCommit> 
   <maxTime>15000</maxTime> 
   <openSearcher>false</openSearcher> 
 </autoCommit> 

这条线上有很多相关的讨论和推荐。

票数 6
EN

Stack Overflow用户

发布于 2013-03-25 21:41:13

今天我遇到了同样的问题,在阅读@femtoRgon的建议线程之后,我在solrconfig.xml中更改了下面的内容

代码语言:javascript
复制
<autoCommit> 
  <maxTime>15000</maxTime> 
  <openSearcher>false</openSearcher> 
</autoCommit>

代码语言:javascript
复制
<autoCommit> 
  <maxDocs>15000</maxDocs> 
  <openSearcher>false</openSearcher> 
</autoCommit>

它不再给我那个错误了。所以它每15000个文档提交一次。在我的例子中,这是足够频繁的,不会遇到内存问题。在我的MacBook Pro中,对包含产品信息(如此简短的文档)的4M文档进行索引需要几分钟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13719786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档