2012-08-26 23 views
6

Solr uygulamam için bir yük testi yapıyorum. Endeks 200 milyondan fazla belgeye sahiptir. Varsayılan Jetty sunucusunu kullanıyorum ve maksimum JVM belleği 4GB olarak ayarladım. Uygulamamı test etmek için 5000 metin sorgusu hazırlayıp Solr'a tek tek veriyorum. Ancak, yaklaşık 110 sorgudan sonra, Jetty konteyner bir istisna atar.Neden bu her zaman olur? Solr OutOfMemoryError GC havai yük limiti aşıldı

Bu neden oluyor? Bunu nasıl çözebilirim?

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

64 bit os ve 64 bit java sürümünüz var mı? –

+0

'-Xss4m' kullanarak JVM yığınını artırmayı deneyin. –

+1

Sadece anladım. Düşük seviye Lucene önbelleği neden oldu. Bu kodu devre dışı bırakıyorum. Sonra çalışır. (biraz yavaş olsa da) – Xiao

cevap

1

Açıkçası, 4Gb RAM, 200M indeksinde yük testini işlemek için çok düşük. Ortalama belge boyutu 1K olan 300M dokümanlarda Solr 4.2 için performans testi yaptık. Amaç, çok yönlü olmayan sorgular için kararlı yanıt süresi < 3 san'a sahip olabileceğimiz en düşük makine yapılandırmasını bulmaktı. 100 eşzamanlı sorgu için sonuçlarımız en az makine konfigürasyonunun 8 CPU çekirdeği/15 Gb RAM olduğunu gösterdi. Elbette sonuçlar birçok faktöre bağlı olarak değişecektir, ancak bunu makinenizin boyutlandırması için başparmak kuralı olarak kullanabilirsiniz.

İlgili konular