5

我正在索引我拥有的内容,在将我的 Solr 实例升级到 solr 4 后,我面临一些 OutOfMemories。抛出的异常是:

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

是否有一些已知的错误或我可以测试以摆脱它的东西?

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

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

2 回答 2

6

访问日志时似乎内存不足,一目了然。这可能不是特别有意义,当然会出现“内存不足”错误,但值得一试,尤其是在看到有关 SOLR 4.0 日志记录的投诉之后。尤其是在某种形式的索引重建或大量更新负载期间发生这种情况时。

所以尝试禁用更新日志,我相信这可以通过注释掉来完成:

<updateLog> 
  <str name="dir">${solr.data.dir:}</str> 
</updateLog> 

在 solrconfig.xml 中。


编辑:

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

如果您没有启用自动提交,您可能想尝试在配置中添加它,例如:

 <autoCommit> 
   <maxTime>15000</maxTime> 
   <openSearcher>false</openSearcher> 
 </autoCommit> 

在这个线程上有很多相关的讨论和建议。

于 2012-12-05T09:50:12.780 回答
0

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

<autoCommit> 
  <maxTime>15000</maxTime> 
  <openSearcher>false</openSearcher> 
</autoCommit>

<autoCommit> 
  <maxDocs>15000</maxDocs> 
  <openSearcher>false</openSearcher> 
</autoCommit>

它不再给我那个错误。所以它每 15,000 个文档提交一次。在我的情况下,这种情况足够频繁,不会遇到内存问题。在我的 MacBook Pro 中,索引大约 400 万个包含产品信息的文档(如此短的文档)需要几分钟时间。

于 2013-03-25T21:41:13.820 回答