Назад | Перейти на главную страницу

Регулярная ошибка 500 с SOLR-сервером

В последние недели серверная система 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 просто перестала выделять любую память. Вместо правильного OutOfMemoryExceptions, мы получили эти загадочные сообщения.

Если вы вообще не трогаете модуль проверки орфографии, можете ли вы раскомментировать этот раздел в своей конфигурации и перезапустить службу?

Я думаю, вы получаете несколько запросов "& spellcheck.build = true" (так что он пытается перестроить, пока он уже строится, отсюда и блокировка) - если вы регистрируете все свои запросы solr где-нибудь, проверьте это и посмотрите, сможете ли вы их остановить?