Java Solr-在多个同时写入时发生LockActainFailedException

Java Solr-在多个同时写入时发生LockActainFailedException,java,lucene,full-text-search,solr,Java,Lucene,Full Text Search,Solr,我的应用程序通过REST从多个客户端执行非常频繁的solr写入。我通过使用“commitWithin”属性来使用自动提交功能。使用几天后,LockActainFailedException开始出现。我很难弄清楚问题出在哪里。感谢您的帮助。我将Solr3.1与Tomcat6一起使用 下面是来自solr的错误转储 HTTP状态500-锁获取超时:NativeFSLock@/var/lib/solr/data/index/write.Lock org.apache.lucene.store.lock

我的应用程序通过REST从多个客户端执行非常频繁的solr写入。我通过使用“commitWithin”属性来使用自动提交功能。使用几天后,LockActainFailedException开始出现。我很难弄清楚问题出在哪里。感谢您的帮助。我将Solr3.1与Tomcat6一起使用

下面是来自solr的错误转储


HTTP状态500-锁获取超时:NativeFSLock@/var/lib/solr/data/index/write.Lock org.apache.lucene.store.lockOcctainFailedException:锁获取超时:NativeFSLock@/var/lib/solr/data/index/write.Lock 位于org.apache.lucene.store.Lock.get(Lock.java:84) 位于org.apache.lucene.index.IndexWriter.init(IndexWriter.java:1097) 位于org.apache.solr.update.SolrIndexWriter.init(SolrIndexWriter.java:83) 位于org.apache.solr.update.UpdateHandler.createMainIndexWriter(UpdateHandler.java:102) 位于org.apache.solr.update.DirectUpdateHandler2.openWriter(DirectUpdateHandler2.java:174) 在org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:222) 位于org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:61) 位于org.apache.solr.handler.xmloader.processUpdate(xmloader.java:147) 位于org.apache.solr.handler.xmloader.load(xmloader.java:77) 位于org.apache.solr.handler.ContentStreamHandlerBase.HandlerRequestBody(ContentStreamHandlerBase.java:55) 位于org.apache.solr.handler.RequestHandlerBase.HandlerRequest(RequestHandlerBase.java:129) 位于org.apache.solr.core.SolrCore.execute(SolrCore.java:1360) 位于org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:356) 位于org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:252) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 运行(Thread.java:662)
类型状态报告

消息锁定获取超时:NativeFSLock@/var/lib/solr/data/index/write.Lock
这通常是因为Solr以非标准方式终止,所以它的锁没有被清除。在此之前是否有JVM崩溃/Solr崩溃


另一个原因是,如果您试图将多个solr服务器指向同一位置。例如,请参见.

我将solrconfig.xml中的writeLockTimeout增加到20秒,现在似乎工作正常。早些时候它被设置为1秒,也可能是内存不足。内存不足会导致锁,我在服务器上也看到了同样的情况

从apache文档: 如果Solr实例没有分配足够的内存,Java虚拟机有时会抛出Java OutOfMemoryError。发生这种情况时不会有数据损坏的危险,Solr将尝试正常恢复。但是,引发错误时正在进行的任何添加/删除/提交都不太可能成功。可能会产生其他不利影响。例如,如果正在使用SimpleFSLock锁定机制(如Solr 1.2中的情况),则一个不适时的OutOfMemoryError可能会导致Solr失去对索引的锁定。如果发生这种情况,进一步尝试修改索引将导致

严重:提交/优化期间出现异常:java.io.IOException:锁获取超时:SimpleFSLock@/tmp/lucene-5d12dd782520964674beb001c4877b36-write.Lock


谢谢。我将尝试查看JVM日志。我想这需要一些调整。如何清理锁定?Solr使用文件锁定,因此重命名或删除锁定文件(我们的锁定文件包含
write.lock
)。该文件位于index files文件夹中——对于我们来说,
SolrHome\\data\index
。重命名或删除该文件:我们的文件
lucene-5d886598917ad7fbb03256c713a8aacb-write.lock
被重命名为
TEMP_uulucene-5d886598917ad7fbb03256c713a8aacb-write_u-lock_u-TEMP
。在这之后,重新索引运行时没有锁定问题。显然,这不能替代(1)预防(计划重新索引),(2)可能是错误处理(writer.close&writer.open?)或(3)适合您的超时设置。我在单个客户端写入单个记录时遇到了相同的错误,并增加了
writeLockTimeout
修复了它。我不认为这与并发或“多个同时写入”有任何关系,这是本文的原始标题。我认为索引只是在增长,写的时间也在增加。
HTTP Status 500 - Lock obtain timed out:      NativeFSLock@/var/lib/solr/data/index/write.lock

org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/var/lib/solr/data/index/write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:84)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1097)
at org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:83)
at org.apache.solr.update.UpdateHandler.createMainIndexWriter(UpdateHandler.java:102)
at org.apache.solr.update.DirectUpdateHandler2.openWriter(DirectUpdateHandler2.java:174)
at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:222)
at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:61)
at org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:147)
at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:77)
at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:55)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1360)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:356)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:252)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>Lock obtain timed out: NativeFSLock@/var/lib/solr/data/index/write.lock