elasticsearch线程池配置
在Elasticsearch中,默认的线程池配置如下:
search线程池
-
用途:用于处理搜索请求。
-
特点:
-
类型为
fixed
,即固定大小的线程池。 -
线程数根据分配给Elasticsearch的处理器数量动态计算,以确保搜索请求能够并行处理,提高搜索性能。
-
队列大小限制了等待执行的搜索任务数量,防止过多任务积压导致系统过载。
-
-
线程数:
int((# of allocated processors * 3) / 2) + 1
-
队列大小:
1000
search_throttled线程池
-
用途:用于处理被限制的搜索请求,如慢查询或需要降低优先级的查询。
-
特点:
-
类型为
fixed
。 -
线程数固定为1,意味着这些请求会被顺序执行,避免对系统资源造成过大压力。
-
队列大小限制了等待执行的被限制搜索任务数量。
-
-
线程数:
1
-
队列大小:
100
search_coordination线程池
-
用途:用于协调跨多个分片的搜索请求。
-
特点:
-
类型为
fixed
。 -
线程数根据处理器数量的一半计算,以平衡协调任务的负载。
-
队列大小限制了等待执行的协调任务数量。
-
-
线程数:
(# of allocated processors) / 2
-
队列大小:
1000
get线程池
-
用途:用于处理获取文档的请求。
-
特点:
-
类型为
fixed
。 -
线程数和队列大小与
search
线程池类似,确保获取操作能够高效并行执行。
-
-
线程数:
int((# of allocated processors * 3) / 2) + 1
-
队列大小:
1000
write线程池
-
用途:用于处理写入操作,如索引、删除和更新文档。
-
特点:
-
类型为
fixed
。 -
线程数与处理器数量相等,确保写入操作能够充分利用多核处理器的性能。
-
队列大小较大,允许更多的写入任务排队等待执行。
-
-
线程数:
# of allocated processors
-
队列大小:
10000
-
最大线程数:
1 + (# of allocated processors)
snapshot线程池
-
用途:用于处理快照创建和恢复操作。
-
特点:
-
类型为
scaling
,即可伸缩的线程池。 -
最小线程数为1,最大线程数根据节点的堆内存大小和处理器数量动态调整,以优化快照操作的性能。
-
-
最小线程数:
1
-
最大线程数:在节点的堆内存至少为750MB时,默认为
10
;在节点的堆内存小于750MB时,默认为min(5, (# of allocated processors) / 2)
-
线程保持时间:
5m
snapshot_meta线程池
-
用途:用于处理快照元数据相关操作。
-
特点:
-
类型为
scaling
。 -
最小线程数为1,最大线程数根据处理器数量动态调整,确保元数据操作能够高效执行。
-
-
最小线程数:
1
-
最大线程数:
min(50, (# of allocated processors * 3))
-
线程保持时间:
5m
warmer线程池
-
用途:用于执行索引缓存预热操作。
-
特点:
-
类型为
scaling
。 -
最小线程数为1,最大线程数根据处理器数量动态调整,以优化缓存预热的性能。
-
-
最小线程数:
1
-
最大线程数:
min(5, (# of allocated processors) / 2)
-
线程保持时间:
5m
refresh线程池
-
用途:用于执行索引刷新操作,将内存中的变更写入磁盘。
-
特点:
-
类型为
scaling
。 -
最小线程数为1,最大线程数根据处理器数量动态调整,确保刷新操作能够及时完成。
-
-
最小线程数:
1
-
最大线程数:
min(10, (# of allocated processors) / 2)
-
线程保持时间:
5m
force_merge线程池
-
用途:用于执行索引段合并操作,以优化存储和查询性能。
-
特点:
-
类型为
fixed
。 -
线程数根据处理器数量的1/8计算,确保合并操作能够并行执行,但不会占用过多资源。
-
-
线程数:
max(1, (# of allocated processors) / 8)
-
队列大小:无限制
management线程池
-
用途:用于执行集群管理和节点内部的管理任务。
-
特点:
-
类型为
scaling
。 -
最小线程数为1,最大线程数为5,确保管理任务能够及时响应,同时避免对系统资源造成过大压力。
-
-
最小线程数:
1
-
最大线程数:
5
-
线程保持时间:
5m
index线程池
-
用途:用于处理索引相关的操作,如文档的索引、删除和更新
-
特点:
-
类型为fixed
-
-
线程数:
min(5 * (# of allocated processors), 50)
。线程数是分配给Elasticsearch的处理器数量的5倍,但最大不超过50 -
队列大小:默认为
1000
配置方法
在elasticsearch.yml
中配置线程池
thread_pool: search: size: 30 queue_size: 1000 write: size: 20 queue_size: 500 在这个例子中,search线程池的线程数被设置为30,队列大小为1000;write线程池的线程数被设置为20,队列大小为500。 |
修改elasticsearch.yml
文件中的线程池配置后,需要重启Elasticsearch服务才能使配置生效。
动态配置
Elasticsearch也支持通过API动态地修改线程池配置,而不需要重启服务。例如,可以使用以下API来动态修改线程池配置:
curl -XPUT 'localhost:9200/_cluster/settings' -d '{ "transient": { "threadpool.index.type": "fixed", "threadpool.index.size": 100, "threadpool.index.queue_size": 500 } }' |
这个API会将index
线程池的类型设置为fixed
,线程数设置为100,队列大小设置为500。