「问题描述」:
观察到Elasticsearch集群的CPU使用率监控每间隔10分钟会飙高一次:
问题排查」:
阿里云方抓取到在CPU使用率监控指标飙高时,有merge线程占用了比较高的CPU,排查点有二:
- 是否存在定时merge的任务
- 配置的索引生命周期中是否存在定期的merge操作
解决方案」:
1.获得到某个索引的Edit setting如下:
|
2.通过setting来看,是有merge相关设置的,另外,可以通过GET /_nodes/stats命令,搜索结果中的merges,有这个线程运行的次数,可以在节点CPU打高的前后,看下merges线程运行的次数,主要是看数据节点,目前来看merges的次数挺高的,如果不希望CPU这么频繁的打高,可以对以下两个参数进行调整,降低CPU使用率:
1."index.merge.policy.segments_per_tier"
:
"30" :
每个tier允许的segement 数,注意这个数要大于上面的at_once数,否则这个值会先于最大可操作数到达,就会立刻做merge,这样会造成频繁
2."index.merge.policy.max_merged_segment"
:
"512mb"
: 超过多大size的segment不会再做merge,默认是5g.
「方案使用成果」:
将"index.merge.policy.segments_per_tier"设置为45,观察CPU使用率监控如图,可以观察到CPU使用率有明显的下降趋势。
将"index.merge.policy.max_merged_segment"设置为256mb后,观察CPU使用率监控如图,可以观察到CPU使用率有明显的下降趋势。