1

Solr1.3からSolr1.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は数百から数千ミリ秒まで急上昇します。1回のクエリで最大30〜40秒になります。

  • 複数のブロッキングスレッドは、数千のクエリの後に表示されます。
  • 同じフィールドでのファセットとソートはありません。
  • ファセットフィールドは複数値のテキストフィールドですが、大きなテキスト値はありません。
  • インデックスサイズ-約10GB
  • schema.xmlでファセットのメソッドを指定していません。
  • フィールド値のキャッシュ設定は次のとおりです。

誰かがこれらのブロックされたスレッドが表示される理由を教えてください。

また、それらがフィールド値キャッシュに関連している場合、サイズ175のキャッシュはごくわずかな初期クエリでいっぱいになり、その直後に複数のブロッキングスレッドが表示されますか?

「facet.method=enum」がある場合、どのような違いがありますか?

これはすべてfieldValueCacheに関連していますか、それともこれらのブロッキングスレッドを回避するために設定する必要がある他の構成がありますか?

ありがとう、

ラチタ

キャッシュ値の例:

facetField1_27443:
{field = facet1_27443、memSize = 4214884、tindexSize = 52、time = 22、phase1 = 15、nTerms = 4、bigTerms = 0、termInstances = 6、uses = 1}

facetField1_70:
{field = facetField1_70、memSize = 4223310、tindexSize = 308、time = 28、phase1 = 21、nTerms = 636、bigTerms = 0、termInstances = 14404、uses = 1}

facetField2:{field = facetField2、memSize = 4262644、tindexSize = 3156、time = 273、phase1 = 267、nTerms = 12188、bigTerms = 0、termInstances = 1255522、uses = 7031}

「org.apache.solr.request.UnInvertedField.getUnInvertedField()-BLOCKED」のスタックトレース

at org.apache.solr.request.UnInvertedField.getUnInvertedField(UnInvertedField.java:837)at org.apache.solr.request.SimpleFacets.getTermCounts(SimpleFacets.java:250)at org.apache.solr.request.SimpleFacets.getFacetFieldCounts (SimpleFacets.java:283)at org.apache.solr.request.SimpleFacets.getFacetCounts(SimpleFacets.java:166)at org.apache.solr.handler.component.FacetComponent.process(FacetComponent.java:72)atorg。 apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:195)at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)at org.apache.solr.core.SolrCore.execute( SolrCore.java:1316)at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:338)at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241)atcom.caucho。server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)at 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)at com.caucho.server.port.TcpConnection.run(TcpConnection.java:678)at com.caucho.util.ThreadPool $ Item .runTasks(ThreadPool.java:721)at com.caucho.util.ThreadPool $ Item.run(ThreadPool.java:643)at java.lang.Thread.run(Thread.java:595)compRequest(HttpRequest.java:270)at com.caucho.server.port.TcpConnection.run(TcpConnection.java:678)at com.caucho.util.ThreadPool $ Item.runTasks(ThreadPool.java:721)at com.caucho .util.ThreadPool $ Item.run(ThreadPool.java:643)at java.lang.Thread.run(Thread.java:595)compRequest(HttpRequest.java:270)at com.caucho.server.port.TcpConnection.run(TcpConnection.java:678)at com.caucho.util.ThreadPool $ Item.runTasks(ThreadPool.java:721)at com.caucho .util.ThreadPool $ Item.run(ThreadPool.java:643)at java.lang.Thread.run(Thread.java:595)

org.apache.lucene.index.SegmentReader $ CoreReaders.getTermsReader()-ブロック

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.apache。 lucene.index.SegmentReader.termDocs(SegmentReader.java:981)at org.apache.solr.search.SolrIndexReader.termDocs(SolrIndexReader.java:320)at org.apache.solr.search.SolrIndexSearcher.getDocSetNC(SolrIndexSearcher.java: 640)org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:563)at org.apache.solr.search.SolrIndexSearcher.numDocs(SolrIndexSearcher.java:1422)at com.askme.solrenhancements.facet.ExtendedFacet com.askme.solrenhancementsの.getCustomFacetCount(ExtendedFacet.java:132)。

4

1 に答える 1

0

テストでもこの問題に遭遇しました。次のコードの近くのブロックが興味深いことがわかりました。

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で構築されていると思います。次の投稿の「コード パッチ」を使用できます: Use NIO positional read to avoid synchronization in FSIndexInput

于 2011-03-10T13:54:27.420 に答える