2011-05-25 15 views
19

Mi aplicación realiza escrituras de solr muy frecuentes de varios clientes a través de REST. Estoy usando la función autocommit utilizando el atributo "commitWithin". LockObtainFailedException comienza a aparecer después de unos días de uso. Estoy teniendo dificultades para descubrir cuál podría ser el problema. Cualquier ayuda es apreciada. Estoy usando Solr 3.1 con Tomcat 6Solr - LockObtainFailedException en escrituras simultáneas múltiples

aquí es el volcado de error de Solr


HTTP Status 500 - Lock obtain timed out:  [email protected]/var/lib/solr/data/index/write.lock 

org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: [email protected]/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: [email protected]/var/lib/solr/data/index/write.lock 

Respuesta

16

Aumenté writeLockTimeout en solrconfig.xml a 20 segundos y parece estar funcionando bien ahora. Anteriormente se estableció en 1 segundo

+0

Estaba obteniendo el mismo error con un solo cliente que escribe un solo registro, y el aumento de 'writeLockTimeout' lo solucionó. No creo que tenga nada que ver con la concurrencia o "escrituras simultáneas múltiples", que era el título original de esta publicación. Creo que el índice está creciendo y que la cantidad de tiempo que lleva escribir ha aumentado. –

7

Esto suele suceder porque Solr termina de una manera no estándar, por lo que su bloqueo no consiguió limpiado. ¿Hubo una falla de JVM/Solr antes de que esto sucediera?

Otra causa es si está intentando apuntar a varios servidores de solr en la misma ubicación. Ver p. this question.

+0

gracias. Trataré de revisar los registros de JVM. Supongo que requiere algo de afinación. – Nands

+0

¿Cómo se limpian las cerraduras? – Trip

+1

Solr usa el bloqueo de archivos, así que cambie el nombre o elimine el archivo de bloqueo (nuestros archivos de bloqueo contienen 'write.lock'). Ese archivo estaba en la carpeta de archivos de índice, para nosotros, 'SolrHome \ \ data \ index'. Cambie el nombre o elimine ese archivo: nuestro archivo 'lucene-5d886598917ad7fbb03256c713a8aacb-write.lock' fue renombrado como' TEMP__lucene-5d886598917ad7fbb03256c713a8aacb-write_lock__TEMP'. Después de eso, la reindexación se ejecutó sin problemas de bloqueo. Obviamente, eso no es un reemplazo para (1) prevención (re-indexación de programación), (2) tal vez manejo de errores (writer.close & writer.open?), O (3) ajustes de tiempo de espera apropiados para usted. –

2

También podría ser una falta de memoria. La falta de memoria puede causar bloqueos, estoy viendo lo mismo en mi servidor.

De los documentos de apache: Si su instancia de Solr no tiene suficiente memoria asignada, la máquina virtual Java arrojará a veces un OutOfMemoryError de Java. No hay peligro de corrupción de datos cuando esto ocurra, y Solr intentará recuperarse con gracia. Sin embargo, es probable que cualquier adición/eliminación/confirmación en curso cuando se produjo el error tenga éxito. Otros efectos adversos pueden surgir. Por ejemplo, si el mecanismo de bloqueo SimpleFSLock está en uso (como es el caso en Solr 1.2), un OutOfMemoryError inoportuno puede causar que Solr pierda su bloqueo en el índice. Si esto sucede, los nuevos intentos de modificar el índice resultarán en

GRAVES: Excepción durante comprometerse/Optimizar: java.io.IOException: Bloqueo obtener tiempo de espera: [email protected]/tmp/lucene-5d12dd782520964674beb001c4877b36-write.lock

Ver http://wiki.apache.org/solr/SolrPerformanceFactors

Cuestiones relacionadas