Как выбрать подходящее значение 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
, Есть ли инструмент, который я могу использовать, чтобы определить, происходит ли замедление запросов (из-за слишком большого количества параллельных запросов), и если нет, то являются ли запросы привязанными к процессору или памятью (или я должен смотреть на какое-то другое значение полностью)?