Почему производительность индекса упругого поиска падает после частой записи - PullRequest
0 голосов
/ 21 мая 2019

Когда я запускаю скрипт nodejs, он удаляет старый индекс (если он существует) и в соответствии с файлом конфигурации создает новый, после создает Websocket-сервер и начинает прослушивать входящие соединения.

initES() {
    this.elasticsearchClient = new elasticsearch.Client({
      host: `${Config.elasticSearchHost}:${Config.elasticSearchPort}`,
      log: 'trace'
    });

    let deletePromise = this.elasticsearchClient.indices.delete({index: `${Config.elasticSearchIndex}`});
    deletePromise.then(() => {
      console.log(`Index ${Config.elasticSearchIndex} deleted`);
    }, function(e) {
      console.log(e.toJSON())
    }).then(() => {
      let createPromise = this.elasticsearchClient.indices.create({
        index: `${Config.elasticSearchIndex}`,
        body: {
          settings: {
            index: {
              number_of_shards: 1,
              number_of_replicas: 0
            },
            analysis: {
              analyzer: {
                whitespace_analyzer: {
                  tokenizer: 'whitespace',
                  filter: ['lowercase']
                }
              }
            }
          }
        }
      });
      createPromise.then(() => {
        console.log(`Index ${Config.elasticSearchIndex} created`);
      }, (e) => {
        console.log(e.toJSON());
      })
    });
  }

Скрипт предназначен для запуска только один раз, во время загрузки (через cron), он был написан мной и использует стандартную библиотеку ES ( https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html ).

Впереди, пользователь выбирает для расчета заказов (~ 700 предметов, они рассчитываются по системе автоматически, с gearman и phantomjs)

Сначала (первые 8 часов или первый тест) все работает нормально, ES хорошо реагирует, клиенты websocket часто обновляют данные, а данные обновляются в индексе ES.

Если пользователь отменяет процесс или процесс завершается, и пользователь решает пересчитать (все данные удаляются до того, как что-либо надето), процесс ввода-вывода в ES замедляется.

И так далее, и через некоторое время индекс заполняется до ~ 340 .. ~ 350 пунктов, а не до 700. В некоторых случаях ES перестает отвечать.

Хвост файлов журнала ES показывает мне тонны строк

Entering safepoint region: GenCollectForAllocation
[2019-05-21T13:46:45.611+0000][9630][gc,start     ] GC(271) Pause Young (Allocation Failure)
[2019-05-21T13:46:45.611+0000][9630][gc,task      ] GC(271) Using 8 workers of 8 for evacuation
[2019-05-21T13:46:45.616+0000][9630][gc,age       ] GC(271) Desired survivor size 17891328 bytes, new threshold 6 (max threshold 6)
[2019-05-21T13:46:45.617+0000][9630][gc,age       ] GC(271) Age table with threshold 6 (max threshold 6)
[2019-05-21T13:46:45.617+0000][9630][gc,age       ] GC(271) - age   1:     987344 bytes,     987344 total
[2019-05-21T13:46:45.617+0000][9630][gc,age       ] GC(271) - age   2:       5440 bytes,     992784 total
[2019-05-21T13:46:45.617+0000][9630][gc,age       ] GC(271) - age   3:     172640 bytes,    1165424 total
[2019-05-21T13:46:45.617+0000][9630][gc,age       ] GC(271) - age   4:     535104 bytes,    1700528 total
[2019-05-21T13:46:45.617+0000][9630][gc,age       ] GC(271) - age   5:     333224 bytes,    2033752 total
[2019-05-21T13:46:45.617+0000][9630][gc,age       ] GC(271) - age   6:        128 bytes,    2033880 total
[2019-05-21T13:46:45.617+0000][9630][gc,heap      ] GC(271) ParNew: 282158K->2653K(314560K)
[2019-05-21T13:46:45.617+0000][9630][gc,heap      ] GC(271) CMS: 88354K->88355K(699072K)
[2019-05-21T13:46:45.617+0000][9630][gc,metaspace ] GC(271) Metaspace: 85648K->85648K(1128448K)
[2019-05-21T13:46:45.617+0000][9630][gc           ] GC(271) Pause Young (Allocation Failure) 361M->88M(989M) 5.387ms
[2019-05-21T13:46:45.617+0000][9630][gc,cpu       ] GC(271) User=0.01s Sys=0.00s Real=0.00s
[2019-05-21T13:46:45.617+0000][9630][safepoint    ] Leaving safepoint region
[2019-05-21T13:46:45.617+0000][9630][safepoint    ] Total time for which application threads were stopped: 0.0057277 seconds, Stopping threads took: 0.0000429 seconds
[2019-05-21T13:46:46.617+0000][9630][safepoint    ] Application time: 1.0004453 seconds
[2019-05-21T13:46:46.617+0000][9630][safepoint    ] Entering safepoint region: Cleanup
[2019-05-21T13:46:46.617+0000][9630][safepoint    ] Leaving safepoint region

Но, если быть точным, я не вижу ничего критического (кроме распределения ошибок памяти). И даже если все идет хорошо, эти строки также появляются в журнале.

Если я перезапущу свой скрипт (который удаляет старый и создает новый индекс), ES быстро обновляет эти элементы, как это происходит только в первый раз

Итак, мой вопрос:

Почему ES теряет свою производительность, если я insert/update/read/delete data ... insert/update/read/delete data ...

и работает нормально, если я insert/update/read restart script insert/update/read/

1 Ответ

0 голосов
/ 23 мая 2019

Нет ничего общего с Elasticsearch.

Я виноват в том, что не закрыл соединения с веб-сокетом, что привело к замедлению работы сервера и потере его ресурсов.

Извините, ребята, что нашли время

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