我在SolrCloud模式下運行Solr 5.1,並索引大量文檔。它運行良好一段時間,但後來我無法通過HTTP接口連接。我該如何處理堵塞起來的過多CLOSE_WAIT Solr
過多的TCP連接似乎打開。我在Solr前面放了一個Nginx反向代理。 Nginx報告有大約300個開放連接,但solr約有29,000個。即使Nginx關閉連接,Solr也會保持打開狀態。
在Solr的日誌,我多次看到以下內容:
無法寫入響應,客戶端關閉連接,或者我們在org.eclipse.jetty關停 org.eclipse.jetty.io.EofException .http.HttpGenerator.flushBuffer(HttpGenerator.java:914) at org.eclipse.jetty.http.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) at sun.nio.cs.StreamEncode r.implFlush(Unknown Source) at sun.nio.cs.StreamEncoder.flush(Unknown Source) at java.io.OutputStreamWriter.flush(Unknown Source) at org.apache.solr.util.FastWriter.flush(FastWriter的.java:137) 在org.apache.solr.response.QueryResponseWriterUtil.writeQueryResponse(QueryResponseWriterUtil.java:54) 在org.apache.solr.servlet.SolrDispatchFilter.writeResponse(SolrDispatchFilter.java:815) 在org.apache .solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:455) 在org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:220) 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1419) at org.eclipse.jetty.servlet.ServletHandler.doHandle(Servle tHandler.java:455) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) at org.eclipse.jetty。 servlet.ServletHandler.doScope(ServletHandler.java:384) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope( ContextHandler.java:1009) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.serve r.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) at org.eclipse.jetty.server.handler.HandlerWrapper。處理(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:368) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at在org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953) RequestHandler.content(AbstractHttpConnection.java:1014) at org.eclipse.jetty.http.HttpPar ser.parseNext(HttpParser.java:861) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)在org.eclipse.jetty.server上的 。org.eclipse.jettyConnector.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處破壞管道 (在本地方法) 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) at org.eclipse.jetty.io.bio。 StreamEndPoint.flush(StreamEndPoint.java:194) 在org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:838) ...... 36多個
如何解決Solr的?我需要調整Jetty設置嗎?
您的SolrCloud是否通過nginx代理請求路由?這似乎是不必要的,並且可能是意想不到的。實際的CLOSE_WAIT不是Solr問題,而是操作系統問題。你可以考慮減少你的操作系統的長度。 –
你如何將項目索引到Solr?我建議檢查一下你的客戶端,確保它沒有爲每次傳輸啓動一個新的套接字,我在用很多線程索引時遇到過這個問題。 – browskie