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