solr - Solr NativeFSLock超时

标签 solr

建立:
我在CentOS 5.7 linux 2.6.32-042stab044.5的码头容器中运行Apache Solr。该服务器是具有4GB专用RAM和2GB“突发” RAM的VPS。

我正在使用以下选项运行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磁盘空间。

问题:
大约每两周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: NativeFSLock@/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 restart)。 “锁定获取超时”异常停止,并且性能在另外一两个星期内是合理的。

SolrPerformance Wiki指示这是内存问题,这就是为什么我将内存使用量设置为2GB并在终止进程之前检查内存使用量的原因。但是,我不确定这是否是问题所在,因为还有可用的内存(3GB专用内存为4GB,再加上2GB的“突发” RAM)。

题:
为了防止“锁定获取超时”异常并最终提高Solr设置的稳定性,我不必每2周重新启动一次,该怎么办?

最佳答案

不知道您的应用程序,我不应该发表过多评论...但是,对于该索引大小和处理器内核数量而言,500个内核似乎很高(我怀疑,不超过4个)。

您可以重新加载solr核心,以我的经验,这有助于从某些长期存在的对象中回收内存。 http://wiki.apache.org/solr/CoreAdmin#RELOAD

您实际上注意到日志中的内存不足错误吗?您可以先启用verbosegc,然后将您注意到的错误与详细gc输出相关联。

关于solr - Solr NativeFSLock超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143129/

相关文章:

hadoop - Hue 无法访问 CDH 中的 Solr 集合

apache - 在SOLR中的片段前后显示省略号

solr - 如何在不重新索引的情况下将数据移动到Solr生产实例?

php - 将 Symfony2 与 Solr 链接

Solr 查询 - 如何修复非预期结果(可能是文化特定的)?

solr - Solr 中的 "protected phrase"

search - Lucene 中的查询运行时间和索引大小

hadoop - 如何以mapReduce方式建立Lucene索引?

solr - 包含多个单词的elasticsearch短语频率.tf()

java - 处理Solr读写超时异常