Несколько заблокированных потоков в UnInvertedField.getUnInvertedField() & SegmentReader$CoreReaders.getTermsReader

Мы обновляемся с Solr 1.3 до Solr 1.4.1. При использовании Solr 1.3 мы видели несколько блокирующих активных потоков в "org.apache.lucene.store.FSDirectory$FSIndexInput.readInternal() ".

Чтобы использовать преимущества NIO, при обновлении до Solr 1.4.1 мы видим другой тип потоков с множественной блокировкой в ​​org.apache.solr.request.UnInvertedField.getUnInvertedField () &

SegmentReader $ CoreReaders.getTermsReader ". Из-за этого время QTimes увеличивается от нескольких сотен до тысячи мсек. Даже до 30-40 секунд для одного запроса.

  • Несколько блокирующих потоков появляются после нескольких тысяч запросов.
  • У нас нет огранки и сортировки по одним и тем же полям.
  • Наши фасетные поля являются многозначными текстовыми полями, но больших текстовых значений нет.
  • Размер индекса - около 10 ГБ
  • Мы не указали какой-либо метод для огранки в нашем schema.xml.
  • Наши настройки кэша значений полей:

Может кто-нибудь сказать нам, почему мы видим эти заблокированные темы?

Также, если они связаны с нашим кешем значений полей, то кеш размером 175 будет заполнен очень небольшим количеством начальных запросов, и сразу после этого мы увидим несколько блокирующих потоков?

Какая разница, если у нас будет "facet.method = enum"?

Это все связано с fieldValueCache или есть какая-то другая конфигурация, которую мы должны установить, чтобы избежать этих блокирующих потоков?

Спасибо,

Rachita

Пример значений кэша:

facetField1_27443:
{Поле =facet1_27443, Memsize=4214884,tindexSize=52, время =22, Phase1=15,nTerms=4,bigTerms=0,termInstances=6, использует = 1}

facetField1_70:
{Поле =facetField1_70, Memsize=4223310,tindexSize=308, время =28, Phase1=21,nTerms=636,bigTerms=0,termInstances=14404, использует = 1}

facetField2: {field = facetField2, memSize = 4262644, tindexSize = 3156, время =273,phase1=267,nTerms=12188,bigTerms=0,termInstances=1255522, использует =7031}

Трассировка стека для "org.apache.solr.request.UnInvertedField.getUnInvertedField() - BLOCKED"

в org.apache.solr.request.UnInvertedField.getUnInvertedField (UnInvertedField.java:837) в org.apache.solr.request.SimpleFacets.getTermCounts (SimpleFacets.java:250) в org.apache.solr.request.FacetFacetFacet (SimpleFacets.java:283) в org.apache.solr.request.SimpleFacets.getFacetCounts (SimpleFacets.java:166) в org.apache.solr.handler.component.FacetComponent.process (FacetComponent.java:72) в орг.apache.solr.handler.component.SearchHandler.handleRequestBody (SearchHandler.java:195) в org.apache.solr.handler.RequestHandlerBase.handleRequest (RequestHandlerBase.java:131) в org.apache.solr.core.SolrCore.ecute SolrCore.java:1316) в org.apache.solr.servlet.SolrDispatchFilter.execute (SolrDispatchFilter.java:338) в org.apache.solr.servlet.SolrDispatchFilter.doFilter (SolrDispatchFilter.java.1:24).dispatch.FilterFilterChain.doFilter (FilterFilterChain.java:87) в com.caucho.server.webapp.WebAppFilterChain.doFilter (WebAppFilterChain.java:187) at com.caucho.server.dispatch.ServletInvocation.service (ServletInvocation.java:266) в com.caucho.server.http.HttpRequest.handleRequest (HttpRequest.java:270) в com.caucho.server.ne.rp (TcpConnection.java:678) в com.caucho.util.ThreadPool$Item.runTasks (ThreadPool.java:721) в com.caucho.util.ThreadPool$Item.run (ThreadPool.java:643) в java.lang.Thread.run (Thread.java:595)

org.apache.lucene.index.SegmentReader $ CoreReaders.getTermsReader () - BLOCKED

в org.apache.lucene.index.SegmentReader$CoreReaders.getTermsReader (SegmentReader.java:170) в org.apache.lucene.index.SegmentTermDocs. (SegmentTermDocs.java:52) в org.apache.lucene.index.SegmentReader.termDocs (SegmentReader.java:987) в org.apache.lucene.index.IndexReader.termDocs (IndexReader.java:1102) в org.ap.lucene.index.SegmentReader.termDocs (SegmentReader.java:981) по адресу org.apache.solr.search.SolrIndexReader.termDocs (SolrIndexReader.java:320) по адресу org.apache.solr.search.SolrIndexSearjSer: (640) по адресу org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet (SolrIndexSearcher.java:563) по адресу org.apache.solr.search.SolrIndexSearcher.numDocs (SolrIndexSearcher.java:1422)..getCustomFacetCount (ExtendedFacet.java:132) в com.askme.solrenhancements.facet.ExtendedFacet.getCustomFacetCount (ExtendedFacet.java:92) в com.askme.solrenhancements.facet.ExtendedFacet.getFacetAdditionalInfo.askme.solrenhancements.facet.ExtendedFacet.getFacetInfo (ExtendedFacet.java:56) в com.askme.solrenhancements.facet.CustomFacetComponent.process (CustomFacetComponent.java:43) в org.apache.solr.handler.component.SearchHandler.handleRequestBody (SearchHandler.java:195) в org.apache.solr.handler.RequestHandlerBase.handleRequest (RequestHand): в org.apache.solr.core.SolrCore.execute (SolrCore.java:1316) в org.apache.solr.servlet.SolrDispatchFilter.execute (SolrDispatchFilter.java:338) в org.apache.solr.servlet.SolrDispilFilter (SolrDispatchFilter.java:241) в com.caucho.server.dispatch.FilterFilterChain.doFilter (FilterFilterChain.java:87) в com.caucho.server.webapp.WebAppFilterChain.doFilter (WebAppFa. server.dispatch.ServletInvocation.service (ServletInvocation.java:266) в com.caucho.server.http.HttpRequest.handleRequest (HttpRequest.java:270) в com.caucho.server.port.TcpConnection.runc: 678) в com.caucho.util.ThreadPool$Item.runTasks (ThreadPool.java:721) в com.caucho.util.ThreadPool$Item.run (ThreadPool.java:643) в Java.lang.Thread.run (Thread.java:595)

1 ответ

Я встретил эту проблему и в моем тесте. Я нашел блок возле следующего кода интересным:

SimpleFSDirectory.readInternal

protected void readInternal(byte[] b, int offset, int len)
     throws IOException {
  synchronized (file) {
    long position = getFilePointer();
    if (position != file.position) {
      file.seek(position);
      file.position = position;
    }
    int total = 0;

    try {
      do {
        final int readLength;
        if (total + chunkSize > len) {
          readLength = len - total;
        } else {
          // LUCENE-1566 - work around JVM Bug by breaking very large reads into chunks
          readLength = chunkSize;
        }
        final int i = file.read(b, offset + total, readLength);
        if (i == -1) {
          throw new IOException("read past EOF");
        }
        file.position += i;
        total += i;
      } while (total < len);
    } catch (OutOfMemoryError e) {
      // propagate OOM up and add a hint for 32bit VM Users hitting the bug
      // with a large chunk size in the fast path.
      final OutOfMemoryError outOfMemoryError = new OutOfMemoryError(
          "OutOfMemoryError likely caused by the Sun VM Bug described in "
          + "https://issues.apache.org/jira/browse/LUCENE-1566; try calling FSDirectory.setReadChunkSize "
          + "with a a value smaller than the current chunks size (" + chunkSize + ")");
      outOfMemoryError.initCause(e);
      throw outOfMemoryError;
    }
  }
}

Я полагаю, ваш Solr построен на Windows, как и я. Вы можете использовать "исправление кода" в следующем сообщении: используйте позиционное чтение NIO, чтобы избежать синхронизации в FSIndexInput

Другие вопросы по тегам