配置项作用 #
thread_pool.search 相关配置项控制用于处理搜索和聚合请求的线程池大小和队列行为。搜索线程池直接影响集群的搜索并发能力和响应性能。
配置项类型 #
该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。
配置项列表 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
thread_pool.search.size | CPU 核心数 | 搜索线程池大小 |
thread_pool.search.queue_size | 1000 | 初始队列大小 |
thread_pool.search.min_queue_size | 1000 | 最小队列大小 |
thread_pool.search.max_queue_size | 1000 | 最大队列大小 |
thread_pool.search.auto_queue_frame_size | 2000 | 自动调整队列的帧大小 |
thread_pool.search.target_response_time | 1s | 目标响应时间 |
默认值说明 #
size: available_processors(CPU 核心数)
queue_size: 1000
min_queue_size: 1000
max_queue_size: 1000
线程池类型 #
搜索线程池使用 FIXED_AUTO_QUEUE_SIZE 类型,具有以下特点:
- 固定线程数:线程数量固定为
size参数 - 自动调整队列:队列大小根据搜索响应时间动态调整
- 智能队列管理:在目标响应时间内自动优化队列大小
工作原理 #
搜索请求
│
▼
检查线程池状态
│
├─→ 有空闲线程 → 直接执行
│
└─→ 无空闲线程 → 加入队列
│
├─→ 队列未满 → 等待执行
│
└─→ 队列已满 → 拒绝请求
自动队列调整机制 #
┌─────────────────────────────────────────────────────────┐
│ Auto Queue Adjusting │
└─────────────────────────────────────────────────────────┘
│
┌───────────┼───────────┐
│ │
响应时间 < 1s 响应时间 > 1s
│ │
▼ ▼
增大队列 减小队列
(提高并发) (降低延迟)
使用示例 #
# 默认配置(自动使用 CPU 核心数)
# thread_pool.search.size: [CPU核心数]
# thread_pool.search.queue_size: 1000
# 自定义线程池大小
thread_pool.search.size: 48
# 调整队列行为
thread_pool.search.min_queue_size: 500
thread_pool.search.max_queue_size: 2000
thread_pool.search.target_response_time: 2s
推荐设置建议 #
生产环境建议:根据 CPU 核心数和搜索负载调整
| CPU 核心数 | 推荐线程池大小 | 说明 |
|---|---|---|
| 4 核 | 4-8 | 小型实例 |
| 8 核 | 8-16 | 中型实例 |
| 16 核 | 16-32 | 大型实例 |
| 32+ 核 | 32-48 | 超大型实例 |
设置原则:
- CPU 密集型查询:
size = CPU 核心数 - IO 密集型查询:
size = 2 × CPU 核心数 - 混合负载:介于两者之间
性能调优 #
高并发场景 #
# 增加线程池大小处理更多并发搜索
thread_pool.search.size: 64
thread_pool.search.min_queue_size: 2000
thread_pool.search.max_queue_size: 5000
低延迟场景 #
# 减小队列大小,快速拒绝过载请求
thread_pool.search.size: 32
thread_pool.search.min_queue_size: 100
thread_pool.search.max_queue_size: 500
thread_pool.search.target_response_time: 500ms
高吞吐场景 #
# 增大队列,处理更多排队请求
thread_pool.search.size: 32
thread_pool.search.min_queue_size: 2000
thread_pool.search.max_queue_size: 10000
thread_pool.search.target_response_time: 5s
监控线程池状态 #
# 查看线程池统计信息
GET /_cat/thread_pool/search?v
# 输出示例
name active queue rejected
search 12 50 3
# 详细信息
GET /_nodes/stats/thread_pool?filter_path=**.search
指标说明 #
| 指标 | 说明 |
|---|---|
active | 正在执行的任务数 |
queue | 队列中等待的任务数 |
rejected | 被拒绝的任务数 |
largest | 历史最大线程数 |
completed | 已完成的任务数 |
与 search_throttled 的区别 #
| 配置项 | 用途 | 默认大小 |
|---|---|---|
thread_pool.search | 普通搜索请求 | CPU 核心数 |
thread_pool.search_throttled | 节流搜索请求 | 1 |
search_throttled 用于可能消耗大量资源的搜索(如滚动查询、聚合等)。
常见问题 #
问题 1:搜索请求被拒绝
EsRejectedExecutionException: rejected execution of search request
解决方案:
- 增加队列大小
- 增加线程池大小
- 优化查询复杂度
- 实现客户端重试机制
问题 2:搜索延迟高
解决方案:
- 减小线程池大小
- 减小队列大小
- 降低
target_response_time - 检查慢查询
问题 3:CPU 利用率低但搜索慢
解决方案:
- 适当增加线程池大小
- 检查是否有其他资源瓶颈
- 检查查询是否等待数据
相关配置项 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
thread_pool.search_throttled | 节流搜索线程池 | size=1 |
thread_pool.generic | 通用线程池 | core=4, max=4×CPU |
search.max_concurrent_shard_requests | 并发分片请求数 | 8 |
注意事项 #
- 静态配置:修改线程池配置需要重启节点
- CPU 关联:线程数应与 CPU 核心数相匹配
- 内存考虑:每个线程占用一定内存
- 队列权衡:队列越大,吞吐量越高,但延迟也越高
- 自动调整:启用自动队列调整时,实际队列大小会在范围内动态变化





