2012-12-05 30 views
4

在solr 3.6.1中,在针对solr服务器执行并发请求(并发负载测试)时,某些时候出现以下错误。在solr中的500 null错误之前提交3.6.1

org.apache.solr.common.SolrException log 
SEVERE: org.mortbay.jetty.EofException 
Caused by: java.net.SocketException: Broken pipe 

前500空|| org.mortbay.jetty.EofException致力于|在 org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:791)|?在 org.mortbay.jetty.AbstractGenerator $ Output.flush(AbstractGenerator.java:569)|?at org.mortbay.jetty.HttpConnection $ Output.flush(HttpConnection.java:1012)|?at sun.nio.cs .StreamEncoder.implFlush(StreamEncoder.java:278)|?at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)|?at jav a.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)|?at org.apache.solr.common.util.FastWriter.flush(FastWriter.java:115)|?at org.apache.solr.servlet。 SolrDispatchFilter.writeResponse(SolrDispatchFilter.java:353)|?at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:273)|?at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter( ServletHandler.java:1212)|?at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)|?at 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)|?在 Ø rg.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)|?at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)|?at org.mortbay.jetty。 handler.HandlerCollection.handle(HandlerCollection.java:114)|?在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)|?在 org.mortbay.jetty.Server.handle(服务器。 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)|?at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)|?at org.mortbay.jetty.HttpConnec tion.handle(HttpConnection.java:404)|?at org.mortbay.jetty.bio.SocketConnector $ Connection.run(SocketConnector.java:228)|?at org.mortbay.thread.QueuedThreadPool $ PoolThread.run( QueuedThreadPool.java:582)|因编程为 通过:java.net.SocketException:折损管道|?在 java.net.SocketOutputStream.socketWrite0(本地方法)|?在 java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:在 org.mortbay.io.ByteArrayBuffer.writeTo(ByteArrayBuffer.java:368)|?在 org.mortbay.io上的java.net.SocketOutputStream.write(SocketOutputStream.java:136)|?在 。 bio.StreamEndPoint.flush(StreamEndPoint.java:129)|?at org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:161)|?at org.mortbay.jetty.H ttpGenerator.flush(HttpGenerator.java:714)|?... 25 更多

请提出任何想法,以解决从Solr的这个错误?

+0

这也可以通过一个破碎的TCP管道由于客户端造成的(没有码头)。它发生在客户端关闭TCP连接并且solr尝试发送响应时。 – Vincent

回答

7

我不认为这是你的解决方案,由于客户端的超时问题,破管发生(至少发生在我身上)。

检查您的curl超时值并尝试显式设置保持活动的Tomcat,以便您可以再次避免这种情况。

快速更新(只给一个提示,配置可能会有所不同)

在码头文件夹

,你应该寻找一个文件夹名为WEB-INF应包含码头-web.xml文件命名(或网页-jetty.xml)

加上几行:

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

应该帮助你(你喜欢什么更多的改变720)

另外还有一个选项

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

这可能会做你的伎俩。你必须深入到码头的doc很多弄清楚这对于你的情况

更多关于这一点:herehere

+0

感谢您的宝贵答案。在Jetty服务器上运行solr。你能告诉我在哪里可以找到curl超时值吗? – Kaven

+0

编辑更多信息 –

+0

感谢您的详细描述。目前在jetty.xml中,maxIdleTime的值为50000.现在将设置为 300000。让我检查一下这个配置,再次感谢你的努力。 – Kaven