Solr抛出SocketException:连接重置 - java

我有与外部zookeeper连接的8节点Solr云集群。每个节点:30 Gb,4核。
我已经创建了大约100个收藏,每个收藏都有。 30个碎片。 (为什么我需要它,让我们换个说法,业务隔离,业务需求可以是任何东西)。

现在,我正在同时将数据摄取到30个集合的群集中。我看到对少数几个集合的提取失败了。在solr日志中,我可以看到此“连接重置”异常发生。摄入的总时间约为10个小时。

有什么建议吗?即使是由于资源匮乏,我如何能证明由于缺乏资源而导致连接重置即将到来。

====例外======

2015-01-30 09:16:14,454 ERROR [updateExecutor-1-thread-8151] ? (:) - error
java.net.SocketException: Connection reset

at java.net.SocketInputStream.read(SocketInputStream.java:196) ~[?:1.7.0_55]
at java.net.SocketInputStream.read(SocketInputStream.java:122) ~[?:1.7.0_55]
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160) ~[httpcore-4.3.jar:4.3]
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:84) ~[httpcore-4.3.jar:4.3]
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:273) ~[httpcore-4.3.jar:4.3]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260) ~[httpcore-4.3.jar:4.3]
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:283) ~[httpcore-4.3.jar:4.3]
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:251) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:197) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271) ~[httpcore-4.3.jar:4.3]
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123) ~[httpcore-4.3.jar:4.3]
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:682) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57) ~[httpclient-4.3.1.jar:4.3.1]
at org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer$Runner.run(ConcurrentUpdateSolrServer.java:233) [solr-solrj-4.10.0.jar:4.10.0 1620776 - rjernst - 2014-08-26 20:49:51]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_55]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_55]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_55]`enter code here`

参考方案

根据我的经验,这会在cpu耗尽时发生,即使可能持续一分钟也可能导致更新失败。

这是因为它无法执行除当前正在尝试完成的操作以外的任何其他操作。它在队列中有更新,但是与此同时,动物园管理员将其标记为低,因为它无法与分片通信。由于分片被标记为向下(这是导致连接重置的原因),因此发送更新的节点将收到更新分片错误。

如果您有副本行,则副本分片将成为主副本,而当前节点将成为副本。这会触发从新的主分片中吸取索引。

您可以通过减慢索引编制过程中的查询速度,也可以减慢索引编制速度,从而防止发生这种情况。另外添加更多的CPU或添加更多的RAM也将有所帮助。

Java:javaagent无法访问tools.jar - java

我正在开发一个Java代理,它通过tools.jar之类的反射使用com.sun.tools.javac.util.Options中的某些类。为了测试我的代理,我要设置set JAVA_TOOL_OPTIONS=-javaagent:path-to-my-agent-jar并在将Java代理挂接到的简单gradle项目上启动构建。我已将tools.jar添加…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

Java:从类中查找项目名称 - java

仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…