Php5

SOLR-Server 的正常錯誤 500

  • February 24, 2014

最近幾週,我們客戶的 SOLR 伺服器系統經常出現同樣的錯誤,而且越來越頻繁。到現在,幾乎每天都有。在客戶端,SOLR 3.6 向 PHP 客戶端拋出此異常:

java.lang.RuntimeException: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/var/solr/data/spellchecker/write.lock
   at org.apache.solr.spelling.IndexBasedSpellChecker.build(IndexBasedSpellChecker.java:92)
   at org.apache.solr.handler.component.SpellCheckComponent.prepare(SpellCheckComponent.java:109)
   at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:165)
   at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
   at org.apache.solr.core.SolrCore.execute(SolrCore.java:1376)
   at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:365)
   at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:260)
   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:857)
   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:679)
Caused by: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/var/solr/data/spellchecker/write.lock
   at org.apache.lucene.store.Lock.obtain(Lock.java:84)
   at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1098)
   at org.apache.lucene.search.spell.SpellChecker.clearIndex(SpellChecker.java:535)
   at org.apache.solr.spelling.IndexBasedSpellChecker.build(IndexBasedSpellChecker.java:88)
   ... 18 more

這只能解決重新啟動 Servlet-Container (Tomcat 6)。然而,與 SOLR 交談curl完全沒有問題。只有 PHP-Client 會持續拋出這個錯誤。而且據我們所知,我們甚至根本沒有接觸spellchecker過 SOLR 的任何模組。並且崩潰似乎發生在沒有索引發生的時候。

我試圖通過將 RAM 數量和 WriteLockTimeout 增加到 20 秒來解決這個問題,但問題仍然存在。

任何人都可以幫助提示問題是什麼?

原來是記憶體有問題。在安裝了 tomcat 後,有人留下了 JVM 的最大堆大小 128M,這導致 JVM 停止分配任何記憶體。OutOfMemoryException我們得到了這些神秘的資訊,而不是正確的 s。

如果您根本不碰拼寫檢查模組,您可以從配置中取消註釋該部分並重新啟動服務嗎?

我認為您收到了多個“&spellcheck.build=true”請求(因此它正在嘗試重建,而它已經在建構,因此鎖定) - 如果您在某處記錄所有 solr 請求,請檢查是否可以阻止它們?

引用自:https://serverfault.com/questions/514042