0

我在 SolrCloud 模式下运行 Solr 5.1,并索引了很多文档。它运行了一段时间,但后来我无法通过 HTTP 接口连接。

似乎打开了过多的 TCP 连接。我在 Solr 前面放了一个 Nginx 反向代理。Nginx 报告有大约 300 个打开的连接,但 solr 有大约 29,000 个。即使 Nginx 关闭连接,Solr 也会保持打开状态。

在 Solr 日志中,我反复看到以下内容:

无法写入响应,客户端关闭连接,或者我们正在关闭 org.eclipse.jetty.http 的 org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:914) 处的 org.eclipse.jetty.io.EofException。 AbstractGenerator.flush(AbstractGenerator.java:443) at org.eclipse.jetty.server.HttpOutput.flush(HttpOutput.java:100) at org.eclipse.jetty.server.AbstractHttpConnection$Output.flush(AbstractHttpConnection.java:1094)在 sun.nio.cs.StreamEncoder.implFlush(Unknown Source) at sun.nio.cs.StreamEncoder.flush(Unknown Source) at java.io.OutputStreamWriter.flush(Unknown Source) at org.apache.solr.util.FastWriter org.apache.solr.response.QueryResponseWriterUtil.writeQueryResponse(QueryResponseWriterUtil.java:54) 的 org.apache.solr.servlet.SolrDispatchFilter 中的 .flush(FastWriter.java:137)。writeResponse(SolrDispatchFilter.java:815) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:455) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:220) at org.eclipse .jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:137) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 在 org. eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 在 org.eclipse.jetty.server.handler。 ScopedHandler.handle(ScopedHandler.java:135) 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 在 org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java: 154) 在 org.eclipse.jetty.server.Server.handle(Server.java:368) 在 org.eclipse.jetty.server 的 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) .AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 在 org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) 在 org.eclipse.jetty.server。AbstractHttpConnection.content(AbstractHttpConnection.java:953) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861)在 org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) 在 org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) 在 org.eclipse.jetty.server.bio.SocketConnector $ConnectorEndPoint.run(SocketConnector.java:264) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool. java:543) at java.lang.Thread.run(Unknown Source) 原因:java.net.SocketException:java.net.SocketOutputStream 处的管道损坏。socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at org.eclipse.jetty.io.ByteArrayBuffer.writeTo(ByteArrayBuffer.java:375) at org .eclipse.jetty.io.bio.StreamEndPoint.flush(StreamEndPoint.java:164) 在 org.eclipse.jetty.io.bio.StreamEndPoint.flush(StreamEndPoint.java:194) 在 org.eclipse.jetty.http.HttpGenerator .flushBuffer(HttpGenerator.java:838) ... 36 更多194) 在 org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:838) ... 36 更多194) 在 org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:838) ... 36 更多

如何修复 Solr?我需要调整 Jetty 设置吗?

4

1 回答 1

0

问题是我立即提交了每笔交易。当我将其更改为仅每 10 分钟提交一次时,它解决了这个问题。

于 2015-07-01T20:22:01.787 回答