В последние недели серверная система 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
Это может быть решено только перезапуском контейнера сервлета (Tomcat 6). Однако разговор с SOLR закончился curl
не доставляет никаких проблем. Только PHP-клиент постоянно выдает эту ошибку. И насколько нам известно, мы даже не трогаем spellchecker
модуль СОЛР вообще. И сбои, кажется, случаются время от времени, когда индексация не происходит.
Я попытался решить эту проблему, увеличив объем ОЗУ и WriteLockTimeout до 20 секунд, но проблема не исчезла.
Может кто подскажет, в чем проблема?
Оказывается, проблема с памятью. Когда tomcat был установлен, кто-то оставил максимальный размер кучи JVM 128M, из-за чего JVM просто перестала выделять любую память. Вместо правильного OutOfMemoryException
s, мы получили эти загадочные сообщения.
Если вы вообще не трогаете модуль проверки орфографии, можете ли вы раскомментировать этот раздел в своей конфигурации и перезапустить службу?
Я думаю, вы получаете несколько запросов "& spellcheck.build = true" (так что он пытается перестроить, пока он уже строится, отсюда и блокировка) - если вы регистрируете все свои запросы solr где-нибудь, проверьте это и посмотрите, сможете ли вы их остановить?