2010-04-08 6 views
8

que empezar a indexar artículos DB con Solr, pero después de añadir aproximadamente 58 millones artículo (y aproximadamente 113 GB de tamaño de disco), me sale por debajo mensaje de error en error de registro de TomcatOutOfMemoryError: error de espacio de almacenamiento dinámico de Java cuando se inicia Solr

Nota 1: ya configuré el grupo de memoria Init a 256 MB y el grupo de memoria Máx .: 1400 MB al servidor tomcat.
Nota 2: puedo publicar o buscar artículos pero debo esperar más de 3 minutos para obtener una respuesta.

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) 

¿Qué problema hay?

¿Alguna sugerencia?

Pregunta importante: ¿Por qué solr usar la memoria del montón?

+0

¿Ha intentado conectar jconsole para ver mejor qué está pasando? –

+0

¿Está bien que aumente la huella de memoria? ¿Estás almacenando alguna parte del índice en la memoria? Si la respuesta es no, supongo que esto es una pérdida de memoria. Intente utilizar: jmap -histo para ver qué tipo de objetos ocupan una porción mayor del montón de lo esperado. –

+0

gracias por la respuesta. No sé muchos sobre Java, también puedo encontrar jmap. solo instale YourKit java profiler en el servidor. cómo encontrar el problema? – Hamid

Respuesta

4
  1. Actualice a la última jdk 6 si no lo ha hecho ya. Golpeé un OOME similar en jdk 5 que se fue con 6. Sospecho que algo nuevo.

  2. Pruebe a reducir maxPendingDeletes en su solrconfig.xml.

  3. para averiguar qué componente de Solr está consumiendo toda la memoria, inicie Solr como esto:

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

Luego analice el volcado de almacenamiento dinámico utilizando el MAT autónomo de http://www.eclipse.org/mat/ y baje el caché correspondiente que está consumiendo toda su memoria.

+0

Acabo de instalar Windows de 64 bits para establecer una memoria más grande para tomcat (solr) y mi problema resuelve, porque el segmento es muy grande y no se puede abrir con poca memoria. – Hamid

0

Habilite el registro GC y grafique las series temporales, esto le puede indicar la velocidad de asignación de la memoria JVM y la cantidad que se está recolectando, si es que puede aproximarse a una marca de agua alta.

Cuestiones relacionadas