2012-12-05 12 views
5

Sto indicizzando il contenuto in mio possesso e dopo aver aggiornato l'istanza Solr a SOLR 4, mi trovo di fronte a OutOfMemories. L'eccezione generata è:OutOfMemory con 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 

C'è qualche errore noto o qualcosa che potrei testare per sbarazzarmene?

All'interno di questo aggiornamento cambiate due cose:

  • versione solr (3.4-4.0);
  • versione partita lucene (da LUCENE_34 a LUCENE_40).
+0

Quale infrastruttura stai usando? Qual'è la dimensione dei dati? e eventuali cambiamenti nella configurazione. Causa Solr utilizza la gestione della memoria MMAP di default da Solr 3.1 e ciò può causare anche Memoria insufficiente. – Jayendra

+0

Con solr 3.4 abbiamo avuto un indice da 5 GB e non è stata eseguita alcuna configurazione dalla configurazione di distribuzione per Solr 3.4, lo stesso è stato fatto per Solr 4 (nessuna modifica di configurazione) –

risposta

6

Sembra essere a corto di memoria quando si accede ai registri, a colpo d'occhio. Ciò potrebbe non essere particolarmente significativo, con un errore di "Memoria insufficiente", ovviamente, ma vale la pena provare, in particolare dopo aver visto this complaint per la registrazione di SOLR 4.0. Soprattutto se questo si verifica durante la ricostruzione di un indice di un modulo o un carico elevato di aggiornamenti.

Quindi provare a disabilitare il registro di aggiornamento, che a mio avviso può essere fatto commentando:

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

in solrconfig.xml.


EDIT:

Un altro approccio (forse meglio) di questa, prendere un altro sguardo a esso, potrebbe essere quello di impegnarsi più spesso. La crescita del log di aggiornamento sembra essere direttamente correlata ad avere un sacco di aggiornamenti in coda in attesa di commit.

Se non si dispone di autocommit abilitato, si potrebbe desiderare di provare ad aggiungere nella vostra configurazione, qualcosa di simile:

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

C'è un bel po 'di spiegazioni dettagliate e la raccomandazione di essere trovato this thread.

+1

So che potrebbe essere un po 'troppo tardi, ma impostare il registro livello a soli avvertimenti nel log4j.properties risolto lo stesso problema che avevo con solr. La tua risposta mi porta almeno alla fonte del mio problema. I miei file di registro erano enormi (600M). Grazie! – marsalal1014

0

Ho incontrato lo stesso problema di oggi e dopo aver letto @ filo suggerito femtoRgon, ho cambiato quanto segue nella solrconfig.xml

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

a

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

E non mi dà quell'errore . Quindi commette ogni 15.000 documenti. Che nel mio caso è abbastanza frequente da non incorrere in problemi di memoria. Nel mio MacBook Pro sono bastati pochi minuti per indicizzare ~ 4m di documenti contenenti informazioni sul prodotto (documenti così brevi).

Problemi correlati