不为失败找理由,要为成功找方法。

关于ES中Lucene Merge 线程问题;

Elasticsearch | 作者 OnePunchMan | 发布于2018年11月28日 | 阅读数:6809

ES版本2.3.5,7台data-node节点,数据存储非SSD,在大量bulk操作情况下出现节点cpu使用率极高的情况,通过打印es堆栈和hot_thread等方式发现占用CPU的主要线程是Lucene Merge线程,现在不清楚这个Lucene Merge线程的总数量达到10几个居多,但是真正RUNNABLE可能只有1个~几个,还有就是为什么Lucene Merge线程会将cpu占满;
 
配张图;
QQ图片20181128113825.png
已邀请:

rochy - rochy_he

赞同来自: OnePunchMan

Merge 是非常耗费 CPU 的操作;
而且如果不是 SSD 的话,推荐将  index.merge.scheduler.max_thread_count 设置为 1;
否则 ES 会启动 Math.min(3, Runtime.getRuntime().availableProcessors() / 2) 个线程进行 Merge 操作;
这样大部分机械硬盘的磁盘 IO 都很难承受,就可能出现阻塞。
 
下面是 translog 和 merge 的设定,你可以参考一下:
"index": {
"refresh_interval": "5s",
"number_of_shards": "3",
"max_result_window": 10000,
"translog": {
"flush_threshold_size": "500mb",
"sync_interval": "30s",
"durability": "async"
},
"merge": {
"scheduler": {
"max_merge_count": "100",
"max_thread_count": "1"
}
},

要回复问题请先登录注册