2010-04-08 13 views
8

zacznę indeksowania DB artykuły z Solr, ale po dodać około 58 milionów artykuł (i około 113 GB rozmiaru dysku), otrzymuję poniżej komunikat o błędzie w przypadku błędu kocur dziennikaOutOfMemoryError: błąd przestrzeń sterty Java kiedy zacząć solr

Uwaga 1: już ustawiłem pula pamięci Init na 256 MB, a Max pamięć: 1400 MB na serwer tomcat.
Uwaga 2: Mogę publikować lub wyszukiwać artykuł, ale muszę poczekać ponad 3 minuty, aby uzyskać odpowiedź.

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) 

Na czym polega problem?

Masz jakieś sugestie?

Ważne pytanie: Dlaczego solr korzysta z pamięci sterty?

+0

Czy próbowałeś dołączyć jconsole, aby lepiej zrozumieć, co się dzieje? –

+0

Czy można zwiększyć rozmiar pamięci? czy przechowujesz jakąś część indeksu w pamięci? Jeśli odpowiedź brzmi nie, przypuszczam, że jest to przeciek pamięci. Spróbuj użyć: jmap -histo , aby zobaczyć, jakie obiekty zajmują większą część sterty niż oczekiwano. –

+0

dzięki za odpowiedź. nie wiem wiele o java, również nie mogę znaleźć jmap. instaluj tylko profiler YourKit java na serwerze. jak znaleźć problem? – Hamid

Odpowiedz

4
  1. Uaktualnij do najnowszego jdk 6, jeśli jeszcze tego nie zrobiłeś. Wpadłem na podobne OOME na jdk 5, które zniknęło z 6. Podejrzewam coś nio.

  2. Spróbuj obniżyć wartość maxPendingDeletes w pliku solrconfig.xml.

  3. Aby dowiedzieć się, co składnik Solr stosuje się wszystkie pamięci, start solr tak:

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

Następnie przeanalizuj zrzut sterty za pomocą autonomicznego MAT z numeru http://www.eclipse.org/mat/ i opuść odpowiednią pamięć podręczną, która pochłania całą Twoją pamięć.

+0

Po prostu instaluję 64-bitową wersję systemu Windows, aby ustawić większą pamięć dla tomcat (solr) i mój problem zostanie rozwiązany, ponieważ segment jest bardzo duży i nie można go otworzyć z małą ilością pamięci. – Hamid

0

Umożliwia rejestrowanie GC i graficzne szeregowanie czasu, dzięki czemu można określić prędkość przydzielania pamięci JVM i ile jest zbierane, jeśli w ogóle, aby można było uzyskać przybliżony znak wysokiej wody.

Powiązane problemy