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

时间:2015-07-01 13:21:54

标签: java elasticsearch garbage-collection

我有一个由两个节点组成的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]}

根据我的理解(我不是一个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 个答案:

答案 0 :(得分:-1)

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