配置项作用 #
jobscheduler.threadpool.queue_size 配置项用于控制作业调度器线程池中待处理任务队列的最大容量。
此配置限制了线程池队列中可以排队的任务数量。当队列满时,新提交的任务将被拒绝。队列大小影响任务的排队能力和内存占用。
配置项属性 #
- 配置路径:
jobscheduler.threadpool.queue_size - 数据类型:
Integer(整数) - 默认值:
200 - 最小值:
0(不允许排队) - 最大值: 受系统内存限制
- 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 是(支持动态更新)
配置项详解 #
工作机制 #
线程池队列模型
Fixed Executor Builder:
├── 核心线程数: threadpool.size (默认 = CPU 核心数)
├── 队列大小: queue_size (默认 = 200)
└── 拒绝策略: 队列满时拒绝任务
任务处理流程:
新任务提交
│
↓
核心线程空闲?
│
├──── 是 → 直接执行 ✅
│
└──── 否 → 队列未满?
│
├──── 是 → 加入队列 ⏸
│
└──── 否 → 拒绝任务 ❌
队列中任务等待:
├── 等待核心线程空闲
├── 空闲后从队列取出执行
└── 执行完成
队列状态分析 #
queue_size = 200 (默认)
状态 1: 队列空闲
├── 已用: 0
├── 可用: 200
└── 接受新任务 ✅
状态 2: 队列半满
├── 已用: 100
├── 可用: 100
└── 接受新任务 ✅
状态 3: 队列接近满
├── 已用: 190
├── 可用: 10
└── 接受新任务 ⚠️
状态 4: 队列已满
├── 已用: 200
├── 可用: 0
└── 拒绝新任务 ❌
内存占用分析 #
队列内存占用估算
假设每个任务对象约 1KB
queue_size = 200:
队列内存: 200 × 1KB = 200 KB
峰值内存: ~200 KB ✅
queue_size = 500:
队列内存: 500 × 1KB = 500 KB
峰值内存: ~500 KB
queue_size = 1000:
队列内存: 1000 × 1KB = 1 MB
峰值内存: ~1 MB
queue_size = 5000:
队列内存: 5000 × 1KB = 5 MB
峰值内存: ~5 MB ⚠️
配置建议 #
生产环境(默认) #
jobscheduler:
threadpool:
queue_size: 200 # 默认值
建议: 保持默认值 200。适用于大多数场景。
高负载环境 #
jobscheduler:
threadpool:
queue_size: 500 # 增加队列大小
建议: 增加到 500-1000。任务提交频繁时使用。
资源受限环境 #
jobscheduler:
threadpool:
queue_size: 100 # 减少队列大小
建议: 减少到 100。内存受限时使用。
不允许排队 #
jobscheduler:
threadpool:
queue_size: 0 # 不允许排队
建议: 设置为 0。需要任务快速失败时使用。
代码示例 #
easysearch.yml 基础配置 #
jobscheduler:
threadpool:
queue_size: 200
高负载配置 #
jobscheduler:
threadpool:
size: 8
queue_size: 500
资源受限配置 #
jobscheduler:
threadpool:
size: 4
queue_size: 100
动态更新配置 #
PUT /_cluster/settings
{
"transient": {
"jobscheduler.threadpool.queue_size": 500
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
jobscheduler.threadpool.queue_size | 队列大小 | 200 |
jobscheduler.threadpool.size | 线程池大小 | CPU 核心数 |
性能影响分析 #
| queue_size 设置 | 优点 | 缺点 |
|---|---|---|
| 0 | 立即反馈,无内存占用 | 高并发时频繁拒绝 |
| 100 | 内存占用小 | 队列容易满 |
| 200(默认) | 平衡容量和内存 | 标准设置 |
| 500-1000 | 容纳更多任务 | 内存占用较大 |
| 5000+ | 最大容量 | 内存占用很大 |
吞吐量对比 #
假设任务执行时间 100ms,threadpool.size = 4
queue_size = 0:
├── 无队列缓存
├── 并发: 4
└── 拒绝率高 ❌
queue_size = 200:
├── 队列缓存: 200 个任务
├── 等待时间: 200 / 4 × 100ms = 5 秒
└── 拒绝率低 ✅
queue_size = 1000:
├── 队列缓存: 1000 个任务
├── 等待时间: 1000 / 4 × 100ms = 25 秒
└── 拒绝率很低 ✅
使用场景 #
推荐使用默认值的场景 #
- 标准环境: 任务提交频率适中
- 平衡需求: 平衡吞吐量和内存
- 常规硬件: 标准服务器配置
推荐增加队列大小的场景 #
- 任务突发: 任务提交有突发高峰
- 可以等待: 任务可以容忍较长等待
- 充足内存: 节点内存充足
- 减少拒绝: 希望减少任务拒绝
推荐减少队列大小的场景 #
- 内存受限: 节点内存紧张
- 快速失败: 希望任务快速失败
- 实时性要求: 任务需要及时处理
- 低并发: 任务提交频率低
与线程池大小的配合 #
queue_size 和 size 的协同
配置 1: 标准配置
size: 4 (CPU 核心)
queue_size: 200
├── 并发执行: 4
├── 队列等待: 200
└── 总容量: 204 个任务
配置 2: 高并发配置
size: 8
queue_size: 500
├── 并发执行: 8
├── 队列等待: 500
└── 总容量: 508 个任务
配置 3: 低内存配置
size: 2
queue_size: 50
├── 并发执行: 2
├── 队列等待: 50
└── 总容量: 52 个任务
任务拒绝处理 #
队列满时的处理
queue_size = 200, 当前队列已满
新任务提交:
│
↓
核心线程忙 + 队列满
│
↓
抛出 EsRejectedExecutionException
│
↓
任务被拒绝 ❌
处理策略:
├── 增加 queue_size
├── 增加 threadpool.size
├── 减少任务提交频率
└── 实现重试机制
动态更新影响 #
配置更新的影响
queue_size: 200 → 500
当前队列状态:
├── 已用: 150 个任务
├── 旧队列大小: 200
└── 可用: 50
更新后队列状态:
├── 已用: 150 个任务(保持)
├── 新队列大小: 500
└── 可用: 350 ✅
新任务可以继续排队,不会影响已有任务
注意事项 #
默认值: 默认值为
200,适用于大多数场景。动态更新: 支持动态更新,修改后立即生效。
内存占用: 队列大小直接影响内存占用。
任务拒绝: 队列满时会拒绝新任务。
与线程数配合: 应与
threadpool.size配合配置。等待时间: 队列越大,任务等待时间可能越长。
监控建议: 监控队列使用情况和拒绝率。
测试验证: 配置变更后应验证任务处理能力。
重启生效: 某些版本可能需要重启才能生效。
合理设置: 过大的队列可能导致内存压力。





