在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 null || org.mortbay.jetty.EofException |?at 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)|引起 by:java.net.SocketException:Broken pipe |?at java.net.SocketOutputStream.socketWrite0(Native Method)|?at 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解决此错误?
答案 0 :(得分: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>
可能会有你的伎俩。你将不得不深入挖掘码头的文档,以便为你的案例找出答案