如何为 Sphinx 选择合适的 max_children 值?

如何为 Sphinx 选择合适的 max_children 值?

我们在 3 个 EC2 实例(当前为 m3.large)的集群上运行了一个 Sphinx 安装(2.0.3)。

目前,我们的 Sphinx 配置中有workers = threadsmax_children = 30(每个框都相同)。我们定期收到可怕的“临时搜索错误:服务器已达到最大容量,请稍后重试”。我们的实例的 CPU 利用率徘徊在 5% 左右。以下是一些示例 top 输出:

top - 19:51:56 up 22:15,  1 user,  load average: 0.08, 0.04, 0.01
Tasks:  82 total,   2 running,  80 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.5%id,  0.3%wa,  0.0%hi,  0.0%si,  0.2%st
Mem:   7872040k total,  2911920k used,  4960120k free,   245168k buffers
Swap:        0k total,        0k used,        0k free,  2190992k cached

Sphinx 文档似乎都提到了关于设置 max_children 的内容“有助于控制服务器负载”。在搜索时,我发现一个论坛帖子表明设置它任何一个太高或太低都会导致“服务器超负荷” - 我推测前者是因为单个查询不足 - 但没有进一步提示如何选择正确的级别。(我找不到这篇文章的链接来拯救我的生命。抱歉。)

两个相关问题:

  • 我是否可以正确地认为低 CPU 表明 max_children 可以/应该高于 30?
  • 我如何才能找到最佳数量(即,通常不会导致查询速度变慢的最大子项数量)?我不太确定 Sphinx 会记录哪些类型的信息query.log。是否有一个工具可以用来确定查询速度是否正在变慢(由于并行查询太多),如果没有,查询是 CPU 密集型还是内存密集型(或者我应该完全查看其他值)?

相关内容