Elasticsearch响应时间慢

时间:2014-07-02 20:19:11

标签: java elasticsearch elasticsearch-marvel

Elasticsearch cluster. Marvel dashboard

正如您在附带的屏幕截图中看到的,我们的群集有11个节点,但其中一个从属节点始终处于红色CPU 99%。要提到的是,这从一个奴隶变为另一个奴隶。同时,最近所有查询响应都很慢(一个简单的查询可能需要58秒)。我挖掘了数十个关于Elasticsearch和Java的论坛和资源,找不到任何解决方案或者至少找到解决这个问题的线索。

任何帮助和/或想法都将非常感激。如果需要有关服务器的更多信息,请不要犹豫,我会提供更新。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果没有详细了解您的索引以及您正在做什么样的查询,很难回答这个问题。我有一个类似的经验,节点较少,但总是在最大CPU。这是我按重要性学到的东西:

  1. 将ES升级到最新版本(撰写本文时为1.5)。 1.2和1.5之间存在巨大的性能差异和改进。
  2. 确保所有节点都运行相同版本的ES和Oracle Java 8。
  3. 除非您使用特定的routing,否则查询将命中所有节点,但响应将由一个节点准备。根据正在处理的数据量,这可以解释持续的高CPU使用率。
  4. 确保您的客户端每次都没有连接到同一节点。在N个节点上实现round-robbin以分发查询负载。
  5. 优化您的查询。尽可能使用routing,保持索引较小,如果可能,使用逻辑细分(即/时间戳,用户数据,客户端,类别等)创建它们。
  6. 保持fielddata尽可能小,并尽可能优化。执行查询所需的fielddata数量越多,您的节点将使用的CPU越多,集群获得的速度就越慢。查看doc_values
  7. 你真的需要11个节点吗?如果您的查询不使用路由,则您执行的每个查询都会触及每个节点。每个节点又将其答案发送给处理节点。这意味着处理节点需要做更多的工作,因为它现在必须组合来自11个不同节点的数据,而不是2或3个数据。
  8. 对于11个节点,您可能还会考虑让一个或两个专门用于处理查询(即/他们不存储数据)和其他专用于存储数据的查询。
  9. ElasticSearch团队在每个版本都取得了很大的进步......所以尽可能做的第一件事就是升级到最新的稳定版本。我从1.3升到1.5,很多问题都消失了。)