最佳 Solr JVM/虚拟/物理内存配置



我们公司有几种不同的获取潜在客户的方式,以及我们处理的几种类型的潜在客户。 每种类型的潜在客户之间只有细微的差异,并且大部分信息与一种或多种其他潜在客户类型共享或相关。 我和我的团队正在尝试使用Solr构建/配置一个索引,该索引处理这些潜在客户类型中的每一种及其所有共享数据。 客户数据、度假村数据。等(总共约120万条记录)。 我们目前正在托管一个Ubuntu服务器(12G RAM,8核Opteron),运行Tomcat 6和Solr 3.4。

我希望索引在客户在我们的网站上提交潜在客户表单时实时添加记录(每天约 1500-2000 次),以及在员工添加或修改数据时更新(每天约 2500-3000 次)。

此外,我需要网站上的客户和内部员工能够使用过滤器、分面、自动完成、突出显示以及人们期望从精心编写的搜索中获得的所有内容来快速搜索这些数据。

此设置当前正在运行,但经常在网站和我们的内部应用程序中挂起更新记录。 提交每 1000 个文档或 5 秒完成一次,我每天优化一次。 对于这种类型的设置,最佳的JVM,服务器或Solr配置是什么? 任何帮助将不胜感激,我可以根据需要向任何愿意提供帮助的人提供尽可能多的信息。

首先,你不应该优化。

在 Solr 中配置 JVM 堆大小时,有两个常见的错误:

  • 给 JVM 太多内存(操作系统缓存将无法缓存磁盘操作),
  • 给 JVM 没有足够的内存(垃圾收集器会有很大的压力,垃圾收集器将被迫运行频繁的停止世界收集,使用 JMX 监控来确定是否触发了完整的 GC)。

应用程序可能挂起的另一个原因是后台合并。Lucene基于段,每当段数高于mergeFactor时,就会触发合并。较低的mergeFactor值可以解释挂起。

您应该提供有关当前设置的更多详细信息,以便我们为您提供帮助:

  • JVM大小,
  • 您正在使用的收集器(G1、吞吐量收集器、并发低暂停收集器等)
  • 索引大小(在磁盘上,而不是文档数),
  • mergeFactorramBufferSizeMB , ...

最新更新