2012-06-21 3 views
3

설치 : 저는 CentOS 5.7 Linux 2.6.32-042stab044.5의 부두 컨테이너에서 Apache Solr을 실행하고 있습니다. 이 서버는 4GB의 전용 RAM과 2GB의 "버스트 (burst)"RAM을 갖춘 VPS입니다.Solr NativeFSLock 시간 초과

나는 다음과 같은 옵션 SOLR을 실행하는거야 (읽기 쉽도록 줄 바꿈) :

/opt/jre/bin/java -Dsolr.solr.home=/opt/solr/solr 
        -Xms2048m -Xmx2048m 
        -Djetty.logs=/var/log/solr 
        -Djetty.home=/opt/solr 
        -Djava.io.tmpdir=/tmp 
        -jar /opt/solr/start.jar 
        /opt/solr/etc/jetty-logging.xml 
        /opt/solr/etc/jetty.xml 

내 SOLR의 설정은 6.8GB의 디스크에 총, ~ 각 사용 13메가바이트 500 개 코어를 사용합니다.

문제점 : 약 2 주마다 solr 서버가 느리게 응답하기 시작합니다. 나는 stderror 로그를 확인하면 나는 다음과 같은 항목을 많이 참조 :

Jun 21, 2012 9:36:11 AM org.apache.solr.common.SolrException log 
SEVERE: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: [email protected]/opt/solr/solr/examplestore/data/index/write.lock 
     at org.apache.lucene.store.Lock.obtain(Lock.java:84) 
     at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1108) 
     at org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:83) 
     at org.apache.solr.update.UpdateHandler.createMainIndexWriter(UpdateHandler.java:101) 
     at org.apache.solr.update.DirectUpdateHandler2.openWriter(DirectUpdateHandler2.java:171) 
     at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:219) 
     at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:61) 
     at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:115) 
     at org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:158) 
     at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:79) 
     at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:58) 
     at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129) 
     at org.apache.solr.core.SolrCore.execute(SolrCore.java:1372) 
     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.content(HttpConnection.java:945) 
     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) 
     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
     at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) 
     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

내가 메모리 사용량을 확인하면, 부두 프로세스가 3기가바이트를 사용하고 ~ 3기가바이트가 사용 free -m보고있다.

내 현재 수정 프로그램은 부두 프로세스 (/etc/init.d/solr restart)를 다시 시작하는 것입니다. "잠금 획득 제한 시간 초과"예외가 중지되고 성능이 한 두 주 정도 더 적당합니다.

위키는 이것이 메모리 문제임을 나타냅니다. 따라서 메모리 사용량을 2GB로 설정하고 프로세스를 강제 종료하기 전에 메모리 사용을 확인해야합니다. 그러나 여분의 메모리 (3GB는 4GB 전용, 2GB는 "버스트"RAM)를 사용하므로 더 이상 문제가 아닌지 확실하지 않습니다.

질문 : 그래서 내가 2 주마다 다시 시작할 필요가 없습니다 나는 "잠금 시간 초과 받기"방지 예외 궁극적으로 내 SOLR 설치의 안정성을 개선하기 위해 무엇을 할 수 있는가?

답변

1

응용 프로그램을 모르더라도별로 언급해서는 안됩니다.하지만 인덱스 코어와 프로세서 코어 수는 500 개입니다 (4보다 크지 않습니다).

solr 코어를 다시로드 할 수 있으며 경험상 특정 수명이 긴 특정 객체에서 메모리를 회수하는 데 도움이됩니다. http://wiki.apache.org/solr/CoreAdmin#RELOAD

실제로 로그에 메모리 부족 오류가 있음을 알 수 있습니까? verbosegc를 사용 가능으로 설정하고 verbose gc 출력으로 인해 발생한 오류를 상관시킬 수 있습니다.

+0

로그에 메모리 부족 오류가 표시되지 않았습니다. verbosegc를 활성화하고 확인합니다. 감사! –