在Solr 3.6.1中,出现500 null错误之前的提交。

4
在solr 3.6.1版本中,当对solr服务器执行并发请求(并发负载测试)时,会遇到以下错误:
org.apache.solr.common.SolrException log
SEVERE: org.mortbay.jetty.EofException
Caused by: java.net.SocketException: Broken pipe

并且

在500 null之前提交||org.mortbay.jetty.EofException|?位于 org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:791)|?位于 org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:569)|?位于 org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:1012)|?位于 sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:278)|?位于 sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)|?位于 java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)|?位于 org.apache.solr.common.util.FastWriter.flush(FastWriter.java:115)|?位于 org.apache.solr.servlet.SolrDispatchFilter.writeResponse(SolrDispatchFilter.java:353)|?位于 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:273)|?位于 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)|?位于 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)|?位于 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)|?位于 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)|?位于 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)|?位于 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)|?位于 org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)|?位于 org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)|?位于 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)|?位于 org.mortbay.jetty.Server.handle(Server.java:326)|?位于 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)|?位于 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)|?位于 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)|?位于 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)|?位于 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)|?位于 org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)|?位于 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)|由于 java.net.SocketException: Broken pipe|?位于 java.net.SocketOutputStream.socketWrite0(Native Method)|?位于 java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)|?位于 java.net.SocketOutputStream.write(SocketOutputStream.java:136)|?位于 org.mortbay.io.ByteArrayBuffer.writeTo(ByteArrayBuffer.java:368)|?位于 org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:129)|?位于 org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:161)|?位于 org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:714)|...25 更多
请提供任何解决Solr错误的想法。

这也可能是由于客户端(而非jetty)的破损TCP管道引起的。当客户端关闭TCP连接并且solr尝试发送响应时会发生这种情况。 - Vincent
1个回答

7

我认为这不是关于你的solr的问题,连接中断的原因可能是由于客户端超时问题导致的(至少我遇到过这种情况)。

检查你的curl超时值,并尝试显式地设置一个保持活动状态的Tomcat,这样你就可以避免再次出现这种情况。

快速更新(仅提供提示,配置可能会有所不同)

在jetty文件夹中,你应该寻找一个名为WEB-INF的文件夹,其中应该包含一个名为jetty-web.xml(或web-jetty.xml)的文件。

添加以下几行:

<session-config>
    <session-timeout>720</session-timeout>
</session-config>

我应该可以帮助您(将720改为您更喜欢的任何数字)

还有一个选项

<Set name="maxIdleTime">300000</Set>

这可能能够解决您的问题。您需要仔细研究Jetty文档以找到适合您情况的解决方案。

更多信息请参见:这里这里


非常感谢您宝贵的回答。我正在Jetty服务器上运行solr。您能告诉我在哪里找到curl超时值吗? - Kaven
感谢您提供详细的说明。目前在jetty.xml中,maxIdleTime的值为50000。现在将设置为<maxIdleTime>300000</maxIdleTime>。让我使用这个配置检查一下,再次感谢您的努力。 - Kaven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接