关于线程池队列大小调优疑问

Elasticsearch | 作者 HideOnBush | 发布于2019年05月14日 | 阅读数:176

版本6.4.2 想咨询一下 threadpool.index.queue_size以及threadpool.bulk.queue_size这两个值 默认大小 分别为300 和 50 我不明白的是 这个队列值的单位是M?还是比特 还是其他 搜索了很多资料都未提及 2.x的官方意见不要去动这些配置 但就优化角度讲怎样一个值才合适 尤其bulk 50队列长度虽然不知道是什么单位 但总觉得过小
2242fd38c36ef19180583808f5f9fc1.png


62b8e5e91582034e5d85a880ce9c5c9.png
已邀请:

Ombres

赞同来自: HideOnBush

size指的是线程池中有多少个线程,允许同时执行多少个任务。queue_size指的是当前排队待执行任务的个数,也就是线程池在占满的情况下允许待执行任务的个数。官方建议的是尽量不要改动线程池的大小,也就是size的值。希望能帮到你。

laoyang360 - [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: HideOnBush

是个数,楼上已经回复很详细了。补充一下:
尽量不要动线程池这个配置,如果要动,建议改为:
int(( 核心数 3 )/ 2 )+ 1 。
同时满足:不允许bulk和’indexing’线程池的大小大于CPU内核数。

举例:24核处理器,检索服务器是24核,所以:线程池的大小

=(24*3)/2+1=37,

同时要满足cpu核数为24。37和24取最小值,应该选择24。

默认的队列大小是1000,
现在的问题是:并发请求数据超过了队列最大的大小,导致出错。

可能的解决方案:
1)、增加队列大小;(太大了,可能会导致内存溢出)
2)、增加节点数和副本数。
队列大小:
在elasticsearch.yml中新增如下配置(5.X已经验证):

## Threadpool Settings
### Search pool
thread_pool.search.size: 24
thread_pool.search.queue_size: 2000

#Bulk pool
thread_pool.bulk.size: 24
thread_pool.bulk.queue_size: 1000
# Index pool

thread_pool.index.size: 24
thread_pool.index.queue_size: 1000

如果你的批量请求数目高于队列大小,将会出现RemoteTransportException异常。

要回复问题请先登录注册