为什么频繁写入后Elasticsearch索引性能会下降

时间:2019-05-21 14:03:27

标签: elasticsearch

当我启动nodejs脚本时,它将删除旧索引(如果存在),并根据配置文件创建新索引,然后创建Websocket-server并开始侦听传入的连接。

create

该脚本仅在启动时(通过cron)启动一次,由我编写,并使用标准的ES库( https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html )。

在前面,用户选择计算订单(约700项,他们通过gearman和phantomjs由系统自动计算)

最初(前8个小时或首次测试),一切工作正常,ES响应良好,websocket客户端频繁更新数据,并在ES索引中更新数据。

如果用户取消流程,或者流程完成,并且用户决定重新计算(在添加任何内容之前,所有数据都将被删除),则ES中的IO流程会变慢。

依此类推,一段时间后,索引填充到〜340 ..〜350个项目,而不是700。在某些情况下,ES停止响应。

ES的日志记录文件显示了很多行

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());
      })
    });
  }

但是,确切地说,我看不到任何关键问题(内存故障分配除外)。 即使一切顺利,这些行也会出现在日志中。

如果我重新启动脚本(它将删除旧脚本并创建新索引),则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

及其正常工作,如果我 insert/update/read/delete data ... insert/update/read/delete data ...

1 个答案:

答案 0 :(得分:0)

与Elasticsearch无关。

我的错是没有关闭websocket连接,这导致服务器速度变慢,从而浪费了资源。

抱歉,花些时间