我们有 solr 路由器和分片。在所有分片上进行分面搜索时,这会出现在路由器的 jetty 日志中。
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
随后出现有关内部服务器错误的异常。我们运行分布在多台服务器上的 80 个分片。路由器在其自己的节点上运行。
UPD:在使用 HttpClient 类将请求提交到分片的 SOLR 的 HttpCommComponent 类中,我注意到在 MultiThreadedHttpConnectionManager 上进行了以下设置:mgr.getParams().setDefaultMaxConnectionsPerHost(20);
我觉得 80+ 碎片的设置太少了。
答案1
该消息表明您的服务器收到了 tcp-reset,因此无法继续。
我假设他充当的是 HTTP 客户端?目标 URL 是否正确(即不是封闭端口)。
使用 tcpdump 或类似程序您应该能够找出问题所在。
答案2
经过进一步的调试,我发现其中一个请求的大小为 4.4MB。tomcat6 中的默认 maxPostSize 为 2MB(http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html)。
将其改为 10MB 极大地改善了 solr 方面的情况。