Назад | Перейти на главную страницу

понимание и улучшение использования памяти sphinx searchd

У моей компании есть несколько серверов, которые мы выделяем для запуска Sphinx Search. Все это CentOS 5 с около 48 ГБ памяти, а наша версия searchd - 1.11. Недавно я пытался понять, почему Sphinx использует так мало доступной памяти для своих обычных индексов (пока мы не используем индексы RT). По данным официального сайта Sphinx, все файлы, относящиеся к индексу, за исключением файлов .spd и .spp, хранятся в ОЗУ. В настоящее время это составляет около 14 ГБ для всех наших индексов, которые легко помещаются в ОЗУ. Однако, когда я обращаюсь к htop по поводу использования памяти, он показывает, что используется чуть меньше 1,5 ГБ! Интересно, что он сообщает, что также используется своп, даже если для vm.swappiness установлено значение 0. Если я остановлю searchd, своп упадет до 0. (Следует отметить, что объем используемого свопа не превышает сумму используемой памяти.) Мы настроили его так, чтобы все наши индексы открывались заранее при запуске (preopen_indexes = 1 в нашем sphinx conf).

Учитывая вышеизложенную информацию, у меня есть два вопроса:

  1. Что делает Sphinx с данными в этих индексах, если он не хранит их в памяти?
  2. Можно ли заставить Sphinx хранить больше данных в памяти?

попробуйте mlock = 1 и переиндексируйте все индексы.

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

Что делает Sphinx с данными в этих индексах, если он не хранит их в памяти?

Вероятно, это действительно помещает их в память. Но ОС хоста замечает, что они мало используются, и меняет их.

Предлагаю посмотреть, чтобы убедиться, что ваша подкачка действительно применяется.

Можно ли заставить Sphinx хранить больше данных в памяти?

Если у вас есть свободная память. Поместите индексы на RAM-диск :)


А если у вас действительно достаточно свободной памяти, вместо этого полностью отключите подкачку. Вы рискуете получить сбой, если закончится память, но это не похоже на то, чтобы произойти на этом сервере.