solr update / json半随机挂起

时间:2015-01-23 05:09:02

标签: solr

我是一个完整的solr noob,所以我可能在这里遗漏重要信息。

Solr版本:10.4.2 平台:Mac OS X

我试图将大约5000个文档添加到空索引中。文件有4个字段:

  • id(字符串,索引,存储)
  • title(solr.TextField,indexed,not stored)
  • 关键字(solr.TextField,多值,索引,未存储)
  • 内容(solr.TextField,已编入索引,未存储)

我使用update/json在紧密循环中以100个批量插入文档(为每个批次向update/json端点发出新的HTTP请求)。如果我添加例如每个请求之间100毫秒的延迟,问题会变得更好。如果我延迟一整秒它会完全消失,但这显然是慢得令人无法接受。

我通过为HTTP请求添加非常短的超时(1秒)并实现一些重试逻辑来解决这个问题。它可以工作,但当然我在重试时会一直遇到恼人的延迟。

我的过程常常在等待solr在此过程中的某个时刻做出响应。例如,如果我从一个新的核心开始并立即进行测试,那么这些是我每次运行的结果:

  1. 挂在第45批,solr admin显示3,280个文件
  2. 挂在第52批,solr admin显示3,788个文件
  3. 挂在第14批,solr admin显示3,788份文件
  4. 挂在第17批,solr admin显示3,788份文件
  5. 成功完成所有批次,solr admin显示4,043个文档
  6. 登录solr admin在任何这些运行期间都没有显示输出。在失败或成功运行后的任何时候,我都可以查询索引并根据已添加的数据获得合理的结果。

    update/json请求处理程序是"隐式添加" - 我的solrconfig.xml中没有指定它。

    我尝试将我的锁定机制从原生转换为简单而不改变行为。

    非常感谢您提供的任何帮助。我不知道从哪里开始。

    其他信息:

    1:它似乎永远挂了。通过"挂"我的意思是Solr永远不会响应HTTP请求。如果我取消请求并再次发送请求,它通常会立即正常工作。我让它等了大约10分钟才得到答复。

    2:我的solrconfig.xml包含:

    <updateHandler class="solr.DirectUpdateHandler2">
       <updateLog>
          <str name="dir">${solr.ulog.dir:}</str>
       </updateLog>
       <autoCommit> 
          <maxTime>${solr.autoCommit.maxTime:15000}</maxTime> 
          <openSearcher>false</openSearcher> 
       </autoCommit>
       <autoSoftCommit> 
          <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime> 
       </autoSoftCommit>
    </updateHandler>
    

1 个答案:

答案 0 :(得分:1)

您没有描述实际的&#39;挂起&#39;。是挂了一段时间还是永远?这有很大的不同。

我假设您的实际文档(内容字段?)非常大。

可能有几件事情:

  1. 垃圾收集。如果你为Solr分配了大量内存, 当它达到极限时,GC可能会很长。有Java 在测试运行期间启用GC报告的标志
  2. 索引合并。 观察 data / index 目录,查看文件是否开始移动 周围。
  3. 另请参阅服务器日志,而不仅仅是WebUI。该 服务器日志将不断讨论要进行的操作,仅限用户界面 显示问题。
  4. 它还值得检查你的提交和 软提交设置(在solrconfig.xml中)。