2012-08-26 7 views
6

Estoy haciendo una prueba de carga para mi aplicación Solr. El índice tiene más de 200 millones de documentos. Utilizo el servidor Jetty predeterminado y configuro la memoria máxima de JVM como 4GB. Para probar mi aplicación, realizo 5000 consultas de texto y las expido a Solr una por una. Sin embargo, después de aproximadamente 110 consultas, el contenedor Jetty lanza una excepción.¿Por qué sucede esto todo el tiempo? Solr OutOfMemoryError GC overhead limit excedido

¿Por qué sucede esto? ¿Cómo puedo resolverlo?

SEVERE: java.lang.OutOfMemoryError: GC overhead limit exceeded 
    at org.apache.lucene.util.AttributeImpl.clone(AttributeImpl.java:196) 
    at org.apache.lucene.util.AttributeSource$State.clone(AttributeSource.java:116) 
    at org.apache.lucene.util.AttributeSource$State.clone(AttributeSource.java:119) 
    at org.apache.lucene.util.AttributeSource.captureState(AttributeSource.java:349) 
    at org.apache.solr.highlight.TokenOrderingFilter.incrementToken(DefaultSolrHighlighter.java:595) 
    at org.apache.lucene.search.highlight.OffsetLimitTokenFilter.incrementToken(OffsetLimitTokenFilter.java:43) 
    at org.apache.lucene.analysis.CachingTokenFilter.fillCache(CachingTokenFilter.java:78) 
    at org.apache.lucene.analysis.CachingTokenFilter.incrementToken(CachingTokenFilter.java:50) 
    at org.apache.lucene.search.highlight.Highlighter.getBestTextFragments(Highlighter.java:225) 
    at org.apache.solr.highlight.DefaultSolrHighlighter.doHighlightingByHighlighter(DefaultSolrHighlighter.java:468) 
    at org.apache.solr.highlight.DefaultSolrHighlighter.doHighlighting(DefaultSolrHighlighter.java:379) 
    at org.apache.solr.handler.component.HighlightComponent.process(HighlightComponent.java:116) 
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:194) 
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129) 
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1368) 
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:356) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:252) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) 
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
+0

¿Tiene un sistema operativo de 64 bits y una versión de 64 bits de Java? –

+0

Intenta aumentar la pila de JVM usando '-Xss4m'. –

+1

Solo lo averiguo. Fue causado por el caché Lucene de bajo nivel. Deshabilito ese código. Entonces funciona (aunque un poco lento) – Xiao

Respuesta

1

Obviamente 4Gb RAM es muy bajo para manejar la prueba de carga en el índice de 200M. Hicimos pruebas de rendimiento para Solr 4.2 en documentos de 300M con un tamaño de documento promedio de 1K. El objetivo fue determinar la configuración mínima de la máquina en la que podemos tener un tiempo de respuesta estable de 0 segundos < para consultas no facetadas. Para 100 consultas simultáneas, nuestro resultado mostró que la configuración mínima de la máquina era de 8 núcleos de CPU/15 Gb de RAM. Por supuesto, los resultados variarán dependiendo de muchos factores, sin embargo, puede usar esto como regla general para el tamaño de su máquina.

Cuestiones relacionadas