2

マスターでの新しい SOLR インデックスの生成中に、散発的な SocketTimeoutException を受け取ります (SOLR 4.5.0)

ドキュメントは 500 のパックで送信され、例外は通常、100 万または 200 万のドキュメントが追加された後に発生します。

SOLR サーバー側のスタックトレースは次のとおりです。

java.lang.RuntimeException: [was class java.net.SocketTimeoutException] null
at com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18)
at com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:731)
at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3657)
at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809)
at org.apache.solr.handler.loader.XMLLoader.readDoc(XMLLoader.java:395)
...
Caused by: java.net.SocketTimeoutException
at org.apache.coyote.http11.InternalAprInputBuffer.fill(InternalAprInputBuffer.java:796)
at org.apache.coyote.http11.InternalAprInputBuffer$SocketInputBuffer.doRead(InternalAprInputBuffer.java:827)
at org.apache.coyote.http11.filters.ChunkedInputFilter.readBytes(ChunkedInputFilter.java:243)
at org.apache.coyote.http11.filters.ChunkedInputFilter.parseCRLF(ChunkedInputFilter.java:326)
at org.apache.coyote.http11.filters.ChunkedInputFilter.doRead(ChunkedInputFilter.java:128)
at org.apache.coyote.http11.InternalAprInputBuffer.doRead(InternalAprInputBuffer.java:738)
at org.apache.coyote.Request.doRead(Request.java:428)
at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:304)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:405)
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:327)
at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:162)

SOLR は、Apache Tomcat (バージョン 6.0.26) および JAVA7 で実行されています。

tomcat server.xml のコネクタは次のように構成されています。

<Connector port="1086" protocol="HTTP/1.1" URIEncoding="UTF-8"
    connectionTimeout="600000"
    redirectPort="8443"
    maxThreads="100"
    keepAliveTimeout="5000"
    maxKeepAliveRequests="5"
    minSpareThreads="3"
    maxSpareThreads="10"
    compression="on"
    compressableMimeType="application/octet-stream,text/html,text/xml,text/plain"
/>

600000 (10 分) の connectionTimeout は、APR コネクタの socketTimeout としてもカウントされると思います。

APR コネクタ コードを少し掘り下げると、文字列の欠落が原因で null メッセージが表示されるようです

throw new SocketTimeoutException(sm.getString("iib.failedread"));
4

1 に答える 1

2

私は自分の質問に答えます。

このエラーは、ほぼ確実に SOLR マスターの tomcat コネクタのタイムアウトが原因でした。

実際、タイムアウト値は 5000 (5 秒) で、600000 (10 分) に設定されているため、エラーは再び表示されていません。

nullメッセージに関しては、APR コードに設定文字列がないことが原因である可能性があります。

throw new SocketTimeoutException(sm.getString("iib.failedread"));
于 2014-10-01T12:07:35.817 に答える