Java 生成新索引时SOLR master中的零星SocketTimeoutException

Java 生成新索引时SOLR master中的零星SocketTimeoutException,java,tomcat,solr,apr,socket-timeout-exception,Java,Tomcat,Solr,Apr,Socket Timeout Exception,在主服务器(SOLR 4.5.0)中生成新的SOLR索引期间,我收到零星的SocketTimeoutException 文档以500个文件包的形式发送,通常在添加了约100万或200万个文档后发生异常 以下是SOLR服务器端堆栈跟踪: java.lang.RuntimeException: [was class java.net.SocketTimeoutException] null at com.ctc.wstx.util.ExceptionUtil.throwRuntimeExceptio

在主服务器(SOLR 4.5.0)中生成新的SOLR索引期间,我收到零星的SocketTimeoutException

文档以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在ApacheTomcat(版本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"
/>

我会回答我自己的问题

该错误几乎肯定是由SOLR主机的tomcat连接器超时引起的

事实上,超时值为5000(5秒),并且由于已设置为600000(10分钟),因此该错误不再出现

关于空消息,可能是由于APR代码中缺少配置字符串造成的

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