Solr - LockObtainFailedException для нескольких одновременных записей - PullRequest
19 голосов
/ 25 мая 2011

Мое приложение делает очень частые записи solr от нескольких клиентов через REST. Я использую функцию автоматической фиксации с помощью атрибута commitWithin. LockObtainFailedException начинают появляться после нескольких дней использования. Мне трудно понять, в чем может быть проблема. Любая помощь приветствуется. Я использую Solr 3.1 с Tomcat 6

вот дамп ошибки из solr


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

Ответы [ 3 ]

16 голосов
/ 30 мая 2011

Я увеличил writeLockTimeout в solrconfig.xml до 20 секунд, и теперь он работает нормально.Ранее он был установлен на 1 сек

7 голосов
/ 25 мая 2011

Обычно это происходит из-за нестандартного завершения Solr, поэтому его блокировка не была очищена. Был ли сбой JVM / Solr до того, как это произошло?

Другой причиной является попытка указать несколько серверов Solr в одном месте. Смотрите, например этот вопрос .

2 голосов
/ 25 июля 2011

Это также может быть нехватка памяти. Недостаток памяти может вызвать блокировки, я вижу то же самое на моем сервере.

Из документов Apache: Если вашему экземпляру Solr не хватает памяти, виртуальная машина Java иногда выдает ошибку Java OutOfMemoryError. Когда это произойдет, опасности повреждения данных не будет, и Solr попытается выполнить корректное восстановление. Однако любое добавление / удаление / фиксация во время выполнения ошибки вряд ли будет успешным. Другие побочные эффекты могут возникнуть. Например, если используется механизм блокировки SimpleFSLock (как в случае с Solr 1.2), несвоевременная ошибка OutOfMemoryError может привести к потере Solr своей блокировки индекса. Если это произойдет, дальнейшие попытки изменить индекс приведут к

SEVERE: исключение во время фиксации / оптимизации: java.io.IOException: время ожидания блокировки истекло: SimpleFSLock@/tmp/lucene-5d12dd782520964674beb001c4877b36-write.lock

См. http://wiki.apache.org/solr/SolrPerformanceFactors

...