2012-06-21 19 views
3

設置: 我在CentOS 5.7 linux 2.6.32-042stab044.5的jetty容器中運行Apache Solr。該服務器是一個帶有4GB專用RAM和2GB「突發」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的配置使用〜500內核,每個內核使用13MB,對6.8GB的硬盤總。

問題: 大約每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) 

當我檢查了內存使用情況,碼頭進程正在使用3GB,並free -m報道說〜3GB正在使用中。

我目前的解決辦法是重新啓動碼頭處理(/etc/init.d/solr重啓)。 「鎖定超時」例外停止,並且性能在另一兩個星期內是合理的。

Wiki表示這是一個內存問題,這就是爲什麼我將內存使用設置爲2GB並在殺死進程之前檢查內存使用情況。但是,我不知道這是問題了,因爲有內存備用(3GB使用4GB的專用,再加上「爆發」 RAM 2GB)。

問題: 我能做些什麼來防止「鎖定獲取超時」異常,並最終提高我的Solr設置的穩定性,所以我不必重新啓動它每2周?

回答

1

不知道你的應用程序,我不應該評論太多...但500個內核似乎高了處理器內核的該索引的大小和數量(我懷疑,不超過4個)。

您可以重新載入Solr的核心和以我的經驗與一定的長期生活的對象回收內存幫助。 http://wiki.apache.org/solr/CoreAdmin#RELOAD

你真的在你的日誌中看到內存不足的錯誤?您可以先啓用verbosegc並將您注意到的錯誤與詳細的gc輸出相關聯。

+0

我還沒有看到任何內存不足的錯誤在日誌中。我將啓用verbosegc並檢查。謝謝! –