2012-08-26 1 views
6

내 Solr 응용 프로그램에 대한 부하 테스트를 수행하고 있습니다. 색인에는 2 억 개가 넘는 문서가 있습니다. 기본 Jetty 서버를 사용하고 최대 JVM 메모리를 4GB로 설정합니다. 내 응용 프로그램을 테스트하기 위해 5000 개의 텍스트 쿼리를 만들어 Solr에게 하나씩 발행합니다. 그러나 약 110 개의 쿼리 후에 Jetty 컨테이너는 예외를 throw합니다.왜 이런 일이 발생합니까? Solr OutOfMemoryError GC 오버 헤드 한계 초과

왜 이런 일이 발생합니까? 어떻게 해결할 수 있습니까?

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 비트 OS 및 64 비트 자바 버전이 있습니까? –

+0

'-Xss4m'을 사용하여 JVM 스택을 늘려보십시오. –

+1

나는 그것을 알아 낸다. 저급 Lucene 캐시 때문에 발생했습니다. 나는 그 코드를 무력화시킨다. 그런 다음 작동합니다. (다소 느리지 만) – Xiao

답변

1

분명히 4Gb RAM은 200M 색인에 대한 부하 테스트를 처리하기에 매우 낮습니다. 우리는 평균 문서 크기가 1K 인 300M 문서에서 Solr 4.2의 성능을 테스트했습니다. 목표는 논 -면 처리 된 쿼리에 대해 안정적인 응답 시간 <을 3 초 동안 가질 수있는 최소 기계 구성을 파악하는 것이 었습니다. 100 개의 동시 쿼리에 대해 우리의 결과는 최소한의 시스템 구성이 8 개의 CPU 코어/15Gb RAM임을 보여주었습니다. 물론 결과는 여러 요인에 따라 달라질 수 있지만 기계 크기 조정의 경험 기준으로 사용할 수 있습니다.

관련 문제