【问题标题】:Read Timed out in solrcloud在 solrcloud 中读取超时
【发布时间】:2017-11-06 14:31:07
【问题描述】:

我们使用的是 solrcloud 6.3。我们有一个集合说“MyCore”。它分为两个分片和两个副本。每个分片位于单个服务器上。

规格:索引大小 4 GB,堆大小 2 GB,机器上的总 RAM:40 GB,CPU 数量:32。

我们的索引作业每分钟运行一次,我们使用 Zookeeper 将文档添加到 solr。这是来自 solrconfig.xml 的提交配置

<updateHandler class="solr.DirectUpdateHandler2">
<maxPendingDeletes>100000</maxPendingDeletes>
<updateLog>
     <int name="numRecordsToKeep">200</int>
     <int name="maxNumLogsToKeep">5</int>
</updateLog>
<autoCommit>
    <maxDocs>500</maxDocs>
    <maxTime>120000</maxTime>
    <openSearcher>false</openSearcher>
 </autoCommit>
 <autoSoftCommit>
     <maxDocs>300</maxDocs>
     <maxTime>60000</maxTime>
  </autoSoftCommit>

我们在 solr 日志中看到读取超时异常,当时 solr 在 30 秒内无响应,30 秒后它会自动出现而无需重新启动。在这里只想提一下,我们已经分析了 GC 日志,并没有发现任何异常。 GC 活动正常。 附加日志。

2017-11-06 07:05:00.121 ERROR (updateExecutor-2-thread-624-processing-n:192.168.0.1:8983_solr x:MyCore_shard2_replica1 s:shard2 c:MyCore r:core_node3) [c:MyCore s:shard2 r:core_node3 x:MyCore_shard2_replica1] o.a.s.u.SolrCmdDistributor org.apache.solr.client.solrj.SolrServerException: Timeout occured while waiting response from server at: http://192.168.0.4:8983/solr/MyCore_shard1_replica3
    at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:604)
    at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:262)
    at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:251)
    at org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient.request(ConcurrentUpdateSolrClient.java:420)
    at org.apache.solr.client.solrj.SolrClient.request(SolrClient.java:1219)
    at org.apache.solr.update.SolrCmdDistributor.doRequest(SolrCmdDistributor.java:293)
    at org.apache.solr.update.SolrCmdDistributor.lambda$submit$0(SolrCmdDistributor.java:282)
    at org.apache.solr.update.SolrCmdDistributor$$Lambda$119/389184320.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0(ExecutorUtil.java:229)
    at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor$$Lambda$8/534303375.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160)
    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:84)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:273)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:261)
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:283)
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:251)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:197)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:272)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:124)
    at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:685)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:487)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:498)
    ... 15 more

【问题讨论】:

    标签: solr apache-zookeeper solrcloud solr6


    【解决方案1】:

    这些超时多久发生一次?当他们这样做时,它是否正好是 30 秒超时?

    这可能与您的软/硬提交时间过长有关。 Solr 不应该等待全部时间来提交,但有时它甚至在它没有负载时也会这样做。

    根据您将数据索引到 Zk 的速度,我会尝试类似 30 秒的软提交和 60 秒的硬提交。如果您的索引负载非常高,可能会将您的索引负载增加到更高的倍数。

    这是我第一次设置软/硬提交时间时查看的interesting document,我没有遇到任何问题。推荐部分引用了多个负载/设置。

    祝你好运!

    【讨论】:

    • 不,它并不总是 30 秒,有时会比它高。我们每分钟索引一次数据。索引负载不是很高。每分钟大约 750 个文档,我们添加到 zk。
    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 2020-11-17
    • 2020-01-19
    • 2014-02-21
    • 2014-08-06
    • 2019-08-20
    • 2014-06-06
    • 2011-01-29
    相关资源
    最近更新 更多