Solr 文件描述符计数

Solr File Descriptor Count

我有一个 Apache Solr 4.2.1 实例,它有 4 个内核,总大小 (625MB + 30MB + 20GB + 300MB) 21 GB。

它运行在 4 核 CPU、16GB 内存、120GB 硬盘、CentOS 专用机器上。

第一个核心每天完全导入一次。

第二个核心每两小时完全导入一次。

第 3 个核心每两小时增量导入一次。

4rth 核心每两小时完全导入一次。

服务器也有相当数量的查询(搜索和创建、更新和删除文档)。

每个核心都有 maxDocs:100 和 maxTime:15000 用于 autoCommint 和 maxTime:1000 用于 autoSoftCommit。

系统使用情况是:

  1. 14.96 GB 物理内存的大约 97%

  2. 0MB 交换 Space

  3. 4096 个文件描述符计数的大约 94%

  4. 1.21GB JVM 内存的 60% 到 90%。

当我重新启动机器时,文件描述符计数下降到接近 0,然后在一周左右的时间里稳定地达到上述值。

总而言之,我的问题是:

  1. 4096个文件描述符计数的94%正常吗?

  2. 如何增加文件描述符的最大数量?

  3. 如何计算最大和已用文件描述符计数的理论最优值。

  4. 文件描述符计数会达到 100 吗?如果是,服务器会崩溃吗?或者它会自行将其保持在 100% 以下并正常运行?

非常感谢!

  1. 当然可以。
  2. ulimit -n <number>。参见 Increasing ulimit on CentOS
  3. 确实没有 - 需要多少取决于很多因素,例如您的 mergefactor(如果您有 许多 个文件,打开文件的数量将也很大 - 对于不是完整导入的索引尤其如此。检查数据目录中的文件数量,如果同一索引变得非常零散并且具有较大的合并因子,则发出优化),搜索者数量, 同一台服务器上的其他软件 运行 等
  4. 可以。是的(或者至少它不能正常运行,因为它不能打开任何新文件)。不会。在实践中,您会收到一条关于无法打开文件的消息 "Too many open files".

因此,文件描述符计数 (FDC) 的问题,更准确地说,随着 FDC 的不断增加,我在每次更新后都会提交!

我注意到 Solr 没有删除旧的事务日志。因此,在一周的时间后,FDC 已经用完了,我被迫重新启动。

每次更新后我都停止提交,现在我的 Solr 统计数据是:

  1. 14.96 GB 物理内存的大约 55%
  2. 0MB 交换 Space
  3. 4096 个文件描述符计数的大约 4%
  4. 1.21GB JVM 内存的 60% 到 80%。

另外,旧的事务日志被自动提交(软和硬)删除,Solr 不再有性能磨损!

所以,正如这篇文章中指出的那样:

Understanding Transaction Logs, Soft Commit and Commit in SolrCloud

"Be very careful committing from the client! In fact, don’t do it."