2012-08-26 11 views
6

Wykonuję test obciążenia dla mojej aplikacji Solr. Indeks zawiera ponad 200 milionów dokumentów. Używam domyślnego serwera Jetty i ustawię maksymalną pamięć JVM na 4 GB. Aby przetestować moją aplikację, tworzę 5000 zapytań tekstowych i wydaje je Solr po kolei. Jednak po około 110 zapytaniach kontener Jetty zgłasza wyjątek.Dlaczego tak się dzieje przez cały czas? Solr OutOfMemoryError Limit kosztów GC przekroczył

Dlaczego tak się dzieje? Jak mogę to rozwiązać?

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

Czy masz wersję 64-bitową i 64-bitową java? –

+0

Spróbuj zwiększyć stos JVM, używając '-Xss4m'. –

+1

Po prostu to rozgryzłem. Było to spowodowane niskopoziomową pamięcią podręczną Lucene. Wyłączam ten kod. Wtedy to działa. (choć nieco powolny) – Xiao

Odpowiedz

1

Oczywiście 4Gb RAM jest bardzo niska, aby obsługiwać test obciążenia na 200M indeksu. Wykonaliśmy testy wydajności dla Solr 4.2 na dokumentach 300M ze średnim rozmiarem dokumentu 1K. Celem było ustalenie minimalnej konfiguracji maszyny, na podstawie której możemy uzyskać stabilny czas odpowiedzi < 3 sekundy dla niefasetowanych zapytań. W przypadku 100 równoczesnych zapytań nasz wynik pokazał, że minimalna konfiguracja maszyny to 8 rdzeni procesora/15 GB pamięci RAM. Oczywiście wyniki będą się różnić w zależności od wielu czynników, ale możesz użyć tej reguły do ​​zmiany wielkości maszyny.

Powiązane problemy