Как перестроить индекс эластичного поиска для большого количества данных, чтобы он не был «убит» примерно через 15 часов - PullRequest
0 голосов
/ 12 апреля 2020

У меня около 130 миллионов статей в моей базе данных Postgres на AWS. Я пытаюсь проиндексировать их с помощью эластичного поиска. На экране я ввел:

python manage.py search_index --rebuild -f --parallel --model [APP NAME].[MODEL NAME]

Все началось правильно. Вывод был

Deleting index '[MODEL NAME]'
Creating index '[MODEL NAME]'
Indexing 129413202 'MODEL NAME' objects (parallel)

Но примерно через 15 часов вывод был "убит". Я выполнял это на экземпляре t2.xlarge EC2, который имеет 16 ГБ памяти. Интересно, что сообщение «Killed» произошло после того, как я увидел, что соединение с сервером AWS было разорвано, но это не должно иметь значения, если процесс запускался на экране. Есть идеи, в чем проблема? Мне просто нужно получить еще больший экземпляр EC2?

1 Ответ

1 голос
/ 12 апреля 2020

Процесс, неожиданно завершающий работу с сообщением Killed, часто означает, что он получил SIGKILL; если это так, тогда код выхода будет 137. Трудно быть уверенным, что процесс может явно напечатать Killed и завершить работу с кодом 137 в любом случае, но, если вы не делаете этого в своем коде, то это то, что я проверю next.

Неожиданный SIGKILL часто исходит от OOM-убийцы ядра, который принимает меры, когда системе не хватает памяти, и обычно убивает процесс с наибольшим объемом памяти. Если это так, в журналах ядра будут записаны подробности, которые вы можете прочитать с помощью dmesg.

Если это был убийца OOM, то это звучит как ошибка в этом коде индексации. Индексирование большого объема документов в Elasticsearch должно потребовать довольно ограниченной рабочей памяти, не превышающей 16 ГБ, но легко случайно случайно сохранить слишком много данных в памяти слишком долго, что приведет к чрезмерному использованию памяти.

python manage.py search_index предполагает, что вы используете Django Elasticsearch DSL , который исправил проблему производительности относительно недавно. Убедитесь, что вы используете версию, которая содержит это исправление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...