OutOfMemoryError: ошибка пространства кучи Java при запуске solr - PullRequest
9 голосов
/ 08 апреля 2010

Я начинаю индексировать статьи БД с помощью solr, но после добавления около 58 миллионов статей (и около 113 ГБ на диске) я получаю сообщение об ошибке в журнале ошибок tomcat ниже 1001

Примечание 1: я уже установил пул памяти Init на 256 МБ, а максимальный пул памяти: 1400 МБ на сервер Tomcat.
Примечание 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)

В чем проблема?

Есть предложения?

Важный вопрос: зачем решать, используя кучу памяти ???

Ответы [ 2 ]

5 голосов
/ 17 апреля 2010
  1. Обновите JDK до последней версии 6, если вы этого еще не сделали. Я ударил аналогичный OOME на JDK 5, который ушел с 6. Я подозреваю, что NIO вещь.

  2. Попробуйте опустить maxPendingDeletes в вашем файле solrconfig.xml.

  3. Чтобы узнать, какой компонент solr использует всю память, запустите solr следующим образом:

    java -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = some_directory_of_your_choice -jar start.jar

Затем проанализируйте дамп кучи с помощью автономного MAT из http://www.eclipse.org/mat/ и уменьшите соответствующий кэш, который поглощает всю вашу память.

1 голос
/ 17 апреля 2010

Включите ведение журнала GC и построите график временных рядов, это может сказать вам скорость выделения памяти JVM и сколько собирается, если это вообще возможно, так что вы можете приблизиться к верхней отметке.

...