处理 Solr 读写超时异常

Posted

技术标签:

【中文标题】处理 Solr 读写超时异常【英文标题】:Handling Solr read and write timeout exception 【发布时间】:2011-02-17 13:37:19 【问题描述】:

我是 solr 的新手。 我开发了一个使用 solr 进行索引的网站。 我想处理 solr 读写索引期间可能发生的超时。请指导我如何处理这些异常。 我使用 solrj 作为 solr 客户端,我的网站和 solr 服务器在 tomcat 上运行。

谢谢你!

【问题讨论】:

什么时候得到这些超时?你多久提交一次?检查 Solr 日志,看看是否没有任何警告或错误。 您好毛里科,感谢您的关注!当我触发搜索查询时,我会遇到这些超时。这些异常并不常见。我在我的 tomcat 日志中收到读取超时异常:org.apache.solr.client.solrj.SolrServerException:java.net.SocketTimeoutException: Read timed out at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request (CommonsHttpSolrServer.java:243) 在 org.apache.solr.client.solrj.SolrServer.optimize(SolrServer.java:94) 在 org.apache.solr.client.solrj.SolrServer.optimize(SolrServer.java:82) 。 ..... ..... 堆栈跟踪显示超时发生在优化操作期间,而不是查询期间...您每次触发查询时都在优化吗? 是的,我在查询 solr 之前正在优化。同样在查询被触发后,我再次提交服务器。我应该这样做吗? 嗨 Mauricio,我在触发查询之前测试了我的代码而没有优化服务器,我之前的假设是错误的。我不确定是否要优化它。但是你仍然可以指导我何时提交和多久一次?当我对服务器执行删除或添加索引时,我正在提交服务器。它好吗? 【参考方案1】:

提交和优化是向搜索者提供更新的操作。它们旨在在更新之后运行,而不是在查询之前运行。

此外,它们是昂贵的操作,这就是您偶尔会出现超时的原因。除非您有一些特殊要求,否则我建议您在 solrconfig.xml 中设置 <autoCommit/> 选项。顾名思义,它将根据可配置的标准(例如未提交文档的最大数量或添加文档后的最长时间)自动发出提交。

Optimize 比 Commit 还要贵,基本上是重写索引。优化的频率取决于您提交更改的频率以及每次提交有多少更改。

另见:

SOLR commit and optimize questions http://wiki.apache.org/solr/SolrPerformanceFactors#Updates_and_Commit_Frequency_Tradeoffs http://wiki.apache.org/solr/SolrConfigXml#Update_Handler_Section

【讨论】:

非常感谢毛里西奥。我已经消除了所有疑虑并相应地实施了。现在我只在要添加或删除 solr 索引时使用提交。谢谢!

以上是关于处理 Solr 读写超时异常的主要内容,如果未能解决你的问题,请参考以下文章

11 文件读写和异常处理

DUBBO 超时异常怎么抓到,并处理记入数据库

Redis读超时排查

dubbo超时重试和异常处理

Ajax--请求超时与网络异常处理

gRPC请求超时和异常处理