理解并改善sphinx searchd的内存使用情况

理解并改善sphinx searchd的内存使用情况

我公司有几台服务器专门用于运行 Sphinx Search。所有服务器都是 CentOS 5,内存约为 48GB,我们的 searchd 版本是 1.11。最近我一直在尝试了解为什么 Sphinx 的常规索引占用的可用内存如此之少(我们目前不使用 RT 索引)。根据 Sphinx 官方网站,除 .spd 和 .spp 文件外,与索引相关的所有文件都存储在 RAM 中。目前,这构成了我们所有索引的约 14GG,可以轻松放入 RAM 中。但是,当我查阅 htop 的内存使用情况时,它显示使用的内存略少于 1.5GB!有趣的是,它报告交换空间也在使用中,即使将 vm.swappiness 设置为 0。如果我停止 searchd,交换空间就会降至 0。(应该注意,使用的交换空间量不大于正在使用的内存量。)我们已将其配置为在启动时预先打开所有索引(我们的 sphinx conf 中的 preopen_indexes = 1)。

根据以上信息,我有两个问题:

  1. 如果 Sphinx 没有将这些索引中的数据保存在内存中,它会如何处理这些数据?
  2. 是否可以强制 Sphinx 在内存中保留更多数据?

答案1

尝试 mlock = 1 并重新索引所有索引。

index index1
{
    source      = main1
    path        = /ssd/sphinx/index.main
    charset_type    = utf-8
    docinfo     = extern
    mlock       = 1
}

答案2

如果 Sphinx 没有将这些索引中的数据保存在内存中,它会如何处理这些数据?

它可能确实将它们放入内存中。但主机操作系统注意到它们使用得不多,因此将它们交换出去。

建议查看以确保您的交换功能确实得到应用。

是否可以强制 Sphinx 在内存中保留更多数据?

如果你有多余的内存。将索引放在 RAM 磁盘上 :)


如果你真的有足够的内存,那就完全关闭交换。如果内存不足,你可能会面临崩溃的风险,但这似乎不太可能发生在那台服务器上。

相关内容