Как выбрать подходящее значение max_children для Sphinx?

У нас установлена ​​Sphinx (2.0.3), работающая в кластере из 3 экземпляров EC2 (в настоящее время m3.large).

В настоящее время у нас есть workers = threads а также max_children = 30 в нашем конфиге Sphinx (то же самое на каждой коробке). Мы периодически получаем страшную "временную ошибку searchd: сервер исчерпан, повторите попытку через секунду". Наши экземпляры колеблются около 5% загрузки процессора. Некоторые примеры лучших результатов:

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, что он "полезен для контроля загрузки сервера". При поиске я обнаружил сообщение на форуме, в котором указано, что его слишком высокое или слишком низкое значение может привести к тому, что "сервер исчерпан" - я предполагаю, что первый из-за того, что отдельные запросы истощены, - но у него не было дополнительных советов по выбору правильного уровня. (Я не могу найти ссылку на этот пост снова, чтобы спасти мою жизнь. Извините.)

Два связанных вопроса:

  • Правильно ли я думаю, что низкий процессор предполагает, что max_children может / должен быть выше 30?
  • Как найти оптимальное количество (т. Е. Максимальное число детей, которое [обычно] не приводит к замедлению запроса)? Я не совсем уверен, какая информация Sphinx выходит за рамки query.log, Есть ли инструмент, который я могу использовать, чтобы определить, происходит ли замедление запросов (из-за слишком большого количества параллельных запросов), и если нет, то являются ли запросы привязанными к процессору или памятью (или я должен смотреть на какое-то другое значение полностью)?

0 ответов

Другие вопросы по тегам