Интерпретация горячих нитей в эластичном поиске - PullRequest
0 голосов
/ 15 октября 2019

Я сталкиваюсь с высокими ожиданиями ввода-вывода в моем кластере эластичного поиска по всем узлам при индексации документов. Из какого-то поста онлайн я узнал о горячих темах вasticsearch. Я собрал вывод API горячих потоков. смотрите вывод ниже:

55.0% (275.1ms out of 500ms) cpu usage by thread 'elasticsearch[01][refresh][T#1]'
     7/10 snapshots sharing following 24 elements
       java.lang.Object.wait(Native Method)
       java.lang.Object.wait(Object.java:502)       org.apache.lucene.index.DocumentsWriterFlushControl.waitForFlush(DocumentsWriterFlushControl.java:272)

53.6% (267.8ms out of 500ms) cpu usage by thread 'elasticsearch[01][bulk][T#1]'
     3/10 snapshots sharing following 37 elements
       sun.nio.ch.FileDispatcherImpl.force0(Native Method)
       sun.nio.ch.FileDispatcherImpl.force(FileDispatcherImpl.java:76)
       sun.nio.ch.FileChannelImpl.force(FileChannelImpl.java:388)
       org.elasticsearch.index.translog.TranslogWriter.syncUpTo(TranslogWriter.java:272)
       org.elasticsearch.index.translog.Translog.ensureSynced(Translog.java:521)

За исключением refresh_interval (30 с), все остальные настройки по умолчанию. Исходя из приведенного выше вывода горячих потоков, может кто-нибудь объяснить, что заставляет мои узлы ES ​​ждать так долго. Я понимаю, что первый поток говорит, что он ожидает сброса, а второй - транслога. Какую настройку конфигурации мне следует попробовать? Примечание. Я использую операцию UPDATE для индексации своих документов, и обновления документов происходят часто.

1 Ответ

0 голосов
/ 15 октября 2019

Во время обновлений Elasticsearch необходимо «зафиксировать» свои данные, чтобы сделать их доступными для поиска (сначала они записываются в Translog, а затем сбрасываются в сегменты индекса. Операция фиксации в Elasticsearch является тяжелой операцией для ввода-вывода / ЦП. Обычно во время тяжелых обновленийоперации, которые вы хотите выполнять, совершайте как можно реже.

Параметр, который задействован в этом, называется index.refresh_interval

Как часто выполняется операция обновления, которая вносит последние изменения виндекс, видимый для поиска. По умолчанию 1 с.

Вам следует попытаться найти баланс между частыми обновлениями - это хорошо для наглядности данных и реже для поддержания производительности. Вы можете попытаться настроить его. до 1m или чего-то большего. Идеальное значение во многом зависит от вашего варианта использования

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