我正在为我的内容编制索引,并在将我的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
是否有一些已知的错误或我可以测试的东西摆脱它?
在这次升级中,有两件事发生了变化:
3.4
到4.0
); LUCENE_34
到LUCENE_40
)。答案 0 :(得分:6)
访问日志时似乎内存不足,一目了然。当然,这可能不是特别有意义,因为“Out of Memory”错误,但值得一试,特别是在看到有关SOLR 4.0日志记录的this complaint之后。特别是如果在某种形式的索引重建或更新的重载期间发生这种情况。
所以尝试禁用更新日志,我相信可以通过注释来完成:
<updateLog>
<str name="dir">${solr.data.dir:}</str>
</updateLog>
在solrconfig.xml中。
编辑:
另一种(可能更好的)方法,再看一眼,可能会更频繁地提交。更新日志的增长似乎与等待提交的大量排队更新直接相关。
如果您未启用自动提交,则可能需要尝试在配置中添加自动提交,例如:
<autoCommit>
<maxTime>15000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
在this thread上可以找到很多相关的讨论和建议。
答案 1 :(得分: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万份文件(这么短的文件)。