1

更新:一旦我的应用程序爬升到 > 1000 个对象 [包括 Solr 日志],请参阅 Sunspot-Solr 减速到野兽

SysAdmin 发现 Xen CPU 中断出现峰值,不知道是什么原因造成的。Xen virq_timer 在崩溃前大约 10 分钟中断峰值,这就是我们识别崩溃是否即将到来的方式。

一旦 xen cpu 在尖峰 tomcat 死亡后 10 分钟中断尖峰。

运行普通值设置。它正在索引博客文章类型的内容。这是我反复看到的错误:

严重:java.lang.OutOfMemoryError:org.apache.lucene.search.PhraseQuery$PhraseWeight.scorer(PhraseQuery.java:251) 中 org.apache.lucene.search.ExactPhraseScorer.(ExactPhraseScorer.java:37) 处的 Java 堆空间在 org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:298) 在 org.apache.lucene.search.FilteredQuery.getFilteredScorer(FilteredQuery.java:149) 在 org.apache.lucene.search.IndexSearcher .search(IndexSearcher.java:577) 在 org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:364) 在 org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:1296) 在 org. org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:375) 中的 org.apache.solr.handler.component 中的 apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1176)。QueryComponent.process(QueryComponent.java:394)

严重:java.lang.OutOfMemoryError:java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117) 处 java.util.Arrays.copyOf(Arrays.java:2894) 处的 Java 堆空间 java.lang.AbstractStringBuilder.append( AbstractStringBuilder.java:407) 在 java.lang.StringBuffer.append(StringBuffer.java:241) 在 java.util.logging.SimpleFormatter.format(SimpleFormatter.java:88) 在 org.apache.juli.FileHandler.publish(FileHandler .java:198) 在 java.util.logging.Logger.log(Logger.java:476) 在 org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:588) 在 org.slf4j.impl.JDK14LoggerAdapter.info( JDK14LoggerAdapter.java:285)

在 org.apache.solr.core.SolrCore.execute(SolrCore.java:1386)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
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.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:636)

2013 年 5 月 16 日上午 1:04:46 org.apache.solr.common.SolrException 日志严重:java.lang.OutOfMemoryError:org.apache.lucene.search.ExactPhraseScorer.(ExactPhraseScorer.java:38) 处的 Java 堆空间org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:298) 在 org.apache.lucene.search 的 org.apache.lucene.search.PhraseQuery$PhraseWeight.scorer(PhraseQuery.java:251)。 FilteredQuery.getFilteredScorer(FilteredQuery.java:149) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:577) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:364) at org .apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:1296) 在 org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1176) 在 org.apache.solr.search.SolrIndexSearcher。搜索(SolrIndexSearcher.java:375)

在 org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:394)

设置:

export JAVA_OPTS="-Xms1024m -Xmx4096m"
4

1 回答 1

0

也可能是您现在正在向服务器发送不同类型的查询,这些查询需要更多内存来处理。Java 不会按需分配内存,而是在应用程序启动时获取分配给它的内存,如果它用完,它就会简单地因 OutOfMemoryError 而崩溃。应用程序可能运行良好,直到索引大小增长并且查询消耗足够的内存导致问题。

默认的 Java 堆大小设置(256Mb?)对于运行 Solr 来说非常低。根据我的经验,1-2Gb 是有用的最小值,否则 Solr 会不断崩溃。您可以从管理界面观察 Solr 内存使用情况,并相应地调整设置以匹配特定索引/查询类型的内存要求。

您可以通过在启动时提供 Solr -Xmx1024m 参数或将该设置添加到所有 Java 应用程序的 JAVA_OPTS 环境变量来增加内存分配。

于 2013-05-20T18:19:10.453 回答