清空垃圾收集器时Elasticsearch不可用?

ben*_*oit 5 java garbage-collection elasticsearch

我有一个由两个节点组成的Elasticsearch集群.(实时)网站直接使用此群集,在我的ES群集上不断运行搜索和索引查询.

我的问题是,在常规(并且不可预测)的基础上,当其中一个节点清空垃圾收集器时,整个集群变得不可用.我从节点日志得到的消息是这样的

[2015-07-01 06:43:19,525][INFO ][monitor.jvm] [my_node] [gc][old][205450][116]
duration [5.7s], collections [1]/[6.3s], total [5.7s]/[1m],
memory [22.3gb]->[4.9gb]/[30.9gb],
all_pools {[young] [392.9mb]->[17.2mb]/[665.6mb]}
{[survivor] [29.1mb]->[0b]/[83.1mb]}
{[old] [21.9gb]->[4.9gb]/[30.1gb]}
Run Code Online (Sandbox Code Playgroud)

根据我的理解(我不是一个java人),这一行表明ES正在清空它的垃圾收集器.因此,在5.7秒内,节点没有响应,我的群集也没有响应,也不是我的网站.这种停机时间每天发生5到10次.

我在这里做错了还是这个停机时间不可避免?我应该将Elasticsearch负载均衡器(即data = false,master = false的节点)添加到群集并让我的网站指向此负载均衡器吗?或者我应该在节点前添加另一种负载均衡器(HAProxy?)?或者这是否意味着服务器,数据有问题?

非常感谢提前

有关群集配置的一些信息

  • Elasticsearch 1.6.0集群由2个节点组成(5个分片,1个副本)
  • 该集群包含约1000万个文档,占用约30 Gb.
  • 每个节点都是64Gb RAM服务器,MAX_HEAP_SIZE设置为31g
  • 该网站每秒运行约300次搜索查询,每秒运行约100次索引查询
  • JVM堆的使用率始终在50%到75%之间,从不高于此值

小智 -1

由于当 GC 运行时堆从 21.9gb 变为 4.9gb,我怀疑堆使用率是否在 50% 到 75% 之间,很可能 GC 在 75% 时触发,然后下降到约 15%。如果您没有安装 Marvel - 安装它并监视参数,例如段计数和堆使用情况。要降低段计数,请对写入很少或没有写入的索引运行优化 ( https://www.elastic.co/guide/en/elasticsearch/reference/2.1/indices-optimize.html )。如果 GC 运行时速度仍然缓慢,请尝试减小堆大小。我知道这听起来适得其反,但在这种情况下这是有道理的。Elastic 网站上有一篇关于该主题的很好的文章 - https://www.elastic.co/blog/a-heap-of-trouble