2012-12-05 21 views
5

Zajmuję się indeksowaniem posiadanej zawartości i po uaktualnieniu instancji Solr do Solr 4 mam do czynienia z niektórymi OutOfMemories. Wyjątkiem jest rzucony:OutOfMemory z Solr4

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 

Czy jest jakiś znany błąd lub coś mogłem przetestować, aby się go pozbyć?

W tym uaktualnieniu dwie rzeczy Zmieniono:

  • wersji solr (od 3.4 do 4.0);
  • lucene wersja meczowa (od LUCENE_34 do LUCENE_40).
+0

Jaką infrastrukturę używasz? Jak duży jest rozmiar danych? i wszelkie zmiany w konfiguracji. Przyczyna Solr domyślnie korzysta z zarządzania pamięcią MMAP z Solr 3.1, co może również powodować brak pamięci. – Jayendra

+0

Z Solr 3.4 mamy indeks 5GB i nie dokonaliśmy konfiguracji z konfiguracji dystrybucji dla Solr 3.4, to samo zrobiliśmy dla Solr 4 (bez zmiany konfiguracji) –

Odpowiedz

6

Wydaje się, że brakuje pamięci podczas uzyskiwania dostępu do dzienników, na pierwszy rzut oka. To może nie być szczególnie znaczące, z błędem "Out of Memory", ale warte zachodu, szczególnie po zobaczeniu this complaint odnośnie rejestrowania SOLR 4.0. Szczególnie jeśli występuje podczas odbudowy indeksu jakiejś formy lub dużego obciążenia aktualizacji.

Więc spróbuj wyłączyć dziennik aktualizacji, które moim zdaniem mogą być wykonane przez zakomentowanie:

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

w solrconfig.xml.


EDIT:

Innym (prawdopodobnie lepsze) podejście do tego, biorąc kolejne spojrzenie na nią, może być częstsze popełnić. Rozwój dziennika aktualizacji wydaje się być bezpośrednio związany z posiadaniem wielu oczekujących aktualizacji oczekujących na zatwierdzenie.

Jeśli nie pozwoliły AUTOCOMMIT, może chcesz spróbować dodać go w config, coś jak:

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

Jest sporo powiązanej dyskusji i zalecenia można znaleźć na this thread.

+1

Wiem, że może to być trochę za późno, ale ustawienie dziennika level to just ostrzeżenia w log4j.properties naprawiono ten sam problem, który miałem z solr. Twoja odpowiedź doprowadziła mnie przynajmniej do źródła mojego problemu. Moje pliki dziennika były ogromne (600M). Dzięki! – marsalal1014

0

wpadłem na ten sam problem dzisiaj i po przeczytaniu @ femtoRgon sugerowanej wątku, zmieniłem następujące w solrconfig.xml

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

do

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

To już nie daje mi ten błąd . Tak więc zatwierdza co 15 000 dokumentów. Co w moim przypadku jest wystarczająco częste, aby nie napotkać problemów z pamięcią. W moim MacBooku Pro zajęło kilka minut indeksowanie ~ 4m dokumentów zawierających informacje o produkcie (tak krótkie dokumenty).

Powiązane problemy