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|?at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:791)|?at 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 java.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)|?at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: 182)|?at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)|?at org.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)|?at org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152)|?at org.mortbay.jetty.Server.handle(Server.java:326)|?at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)|?at 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)|? .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: Broken pipe|?at java.net.SocketOutputStream.socketWrite0(Native Method)|?at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)|?at java .net.SocketOutputStream.write(SocketOutputStream.java:136)|?at org.mortbay.io.ByteArrayBuffer.writeTo(ByteArrayBuffer.java:368)|?at org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java :129)|?at org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:161)|?at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:714)|?... 25 更多

请提出任何解决 solr 错误的想法?

4

1 回答 1

7

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

检查您的 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的文档才能为您的情况弄清楚这一点

更多关于这个:这里这里

于 2012-12-05T09:25:32.630 回答