2011-05-25 8 views
19

मेरा एप्लिकेशन बहुत से सोलर आरईएसटी के माध्यम से कई ग्राहकों से लिखता है। मैं "commitविथिन" विशेषता का उपयोग कर ऑटोकॉमिट सुविधा का उपयोग कर रहा हूं। LockObtainFailedException उपयोग के कुछ दिनों के बाद दिखने लगते हैं। मुझे यह पता लगाना मुश्किल हो रहा है कि समस्या क्या हो सकती है। किसी भी मदद की सराहना की है। मैं Solr 3.1 का उपयोग कर रहा बिल्ला 6सोलर - एकाधिक एक साथ लिखने पर LockObtainFailedException

यहाँ

साथ 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 

उत्तर

16

मैंने लिखेंLockTimeout में solrconfig.xml में 20 सेकंड तक बढ़ाया और यह अब ठीक काम कर रहा है। इससे पहले इसे 1 सेकंड

+0

मुझे एक ही ग्राहक को एक ही रिकॉर्ड लिखने में एक ही त्रुटि मिल रही थी, और 'writeLockTimeout' को बढ़ाकर इसे ठीक किया गया। मुझे नहीं लगता कि इसमें समेकन या "एकाधिक एक साथ लिखने" के साथ कुछ भी करना है जो इस पोस्ट का मूल शीर्षक था। मुझे लगता है कि सूचकांक अभी बढ़ रहा है, और लिखने में लगने वाले समय में वृद्धि हुई है। –

7

यह आमतौर पर होता है क्योंकि Solr एक गैर मानक रास्ते में समाप्त, इसलिए इसकी ताला नहीं मिला सफाई की। ऐसा होने से पहले क्या कोई JVM क्रैश/सोलर क्रैश था?

एक अन्य कारण यह है कि यदि आप एक ही स्थान पर एकाधिक सोलर सर्वर इंगित करने का प्रयास कर रहे हैं। उदाहरण देखें this question

+0

धन्यवाद। मैं जेवीएम लॉग देखने की कोशिश करूंगा। मुझे लगता है कि इसे कुछ ट्यूनिंग की आवश्यकता है। – Nands

+0

ताले को कैसे साफ करता है? – Trip

+1

सोलर फ़ाइल लॉकिंग का उपयोग करता है, इसलिए लॉक फ़ाइल का नाम बदलें या हटाएं (हमारी लॉक फाइलों में 'write.lock' है)। वह फ़ाइल इंडेक्स फाइल फ़ोल्डर में थी - हमारे लिए, 'SolrHome \ \ data \ index'। उस फ़ाइल का नाम बदलें या हटाएं: हमारी फ़ाइल 'lucene-5d886598917ad7fbb03256c713a8aacb-write.lock' का नाम बदलकर 'TEMP__lucene-5d886598917ad7fbb03256c713a8aacb-write_lock__TEMP' कर दिया गया था। उसके बाद, लॉकिंग समस्याओं के बिना पुनः अनुक्रमणित भाग गया। जाहिर है, यह (1) रोकथाम (शेड्यूलिंग री-इंडेक्सिंग) के लिए कोई प्रतिस्थापन नहीं है, (2) शायद त्रुटि प्रबंधन (writer.close और writer.open?), या (3) आपके लिए उपयुक्त टाइमआउट सेटिंग्स। –

2

पर सेट किया गया था, यह स्मृति की कमी भी हो सकती है। स्मृति की कमी ताले का कारण बन सकती है, मैं अपने सर्वर पर एक ही चीज़ देख रहा हूं।

अपाचे डॉक्स से: यदि आपके सौर उदाहरण में पर्याप्त आवंटित स्मृति नहीं है, तो जावा वर्चुअल मशीन कभी-कभी जावा आउटऑफमेमरी एरर फेंक देगी। ऐसा होने पर डेटा भ्रष्टाचार का कोई खतरा नहीं है, और सोलर शानदार तरीके से ठीक होने का प्रयास करेगा। त्रुटि को फेंकने पर प्रगति में कोई जोड़/हटाना/काम करता है, हालांकि सफल होने की संभावना नहीं है। अन्य प्रतिकूल प्रभाव उत्पन्न हो सकते हैं। उदाहरण के लिए, यदि SimpleFSLock लॉकिंग तंत्र उपयोग में है (जैसा कि सोलर 1.2 में मामला है), एक बीमार समय OutOfMemoryError संभावित रूप से सोलर को इंडेक्स पर अपना लॉक खोने का कारण बन सकता है। यदि ऐसा होता है, सूचकांक को संशोधित करने के लिए आगे के प्रयास में

गंभीर परिणाम होगा: अपवाद दौरान प्रतिबद्ध/अनुकूलन: java.io.IOException: लॉक का समय समाप्त हो प्राप्त: [email protected]/tmp/lucene-5d12dd782520964674beb001c4877b36-write.lock

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