--- title: "Get 线程池大小配置" date: 2026-03-24 lastmod: 2026-03-24 description: "thread_pool.get.size 配置项用于控制文档获取线程池的线程数量。" tags: ["线程池", "文档获取", "查询性能", "ThreadPool"] summary: "配置项作用 # thread_pool.get.size 配置项用于控制文档获取线程池的固定线程数量。 Get 线程池专门用于处理文档获取操作(get 请求),是查询性能的关键组件。 配置项属性 # 配置路径: thread_pool.get.size 数据类型: Integer(整数) 默认值: CPU核心数(allocatedProcessors) 是否可选: 是 作用域: NodeScope(节点级别) 动态更新: 是(可以动态更新,无需重启) 配置项详解 # 工作机制 # Get 线程池架构 线程池类型: FIXED (固定大小) ┌─────────────────────────────────────┐ │ Get 线程池 │ ├─────────────────────────────────────┤ │ 线程数: size (默认 = CPU核心数) │ │ 队列: queue_size (默认 1000) │ │ 类型: 固定,不伸缩 │ └─────────────────────────────────────┘ 使用场景: 1. 单文档查询 ├── GET /index/_doc/1 ├── 根据ID获取文档 └-- 返回完整文档 2." --- ## 配置项作用 `thread_pool.get.size` 配置项用于控制**文档获取线程池的固定线程数量**。 Get 线程池专门用于处理文档获取操作(get 请求),是查询性能的关键组件。 ## 配置项属性 - **配置路径**: `thread_pool.get.size` - **数据类型**: `Integer`(整数) - **默认值**: `CPU核心数`(`allocatedProcessors`) - **是否可选**: 是 - **作用域**: NodeScope(节点级别) - **动态更新**: 是(可以动态更新,无需重启) ## 配置项详解 ## 工作机制 ``` Get 线程池架构 线程池类型: FIXED (固定大小) ┌─────────────────────────────────────┐ │ Get 线程池 │ ├─────────────────────────────────────┤ │ 线程数: size (默认 = CPU核心数) │ │ 队列: queue_size (默认 1000) │ │ 类型: 固定,不伸缩 │ └─────────────────────────────────────┘ 使用场景: 1. 单文档查询 ├── GET /index/_doc/1 ├── 根据ID获取文档 └-- 返回完整文档 2. 批量查询 ├── _mget API ├── 批量获取文档 └-- 提高效率 3. 实时获取 ├── 需要最新数据 ├── 不经过缓存 └-- 从磁盘读取 4. 源字段过滤 ├── _source:false ├── 只返回元数据 └-- 减少网络传输 ``` ## FIXED 线程池特点 ``` FIXED 线程池特性 固定线程数: ├── 创建: 启动时创建 size 个线程 ├── 保持: 始终保持活跃 ├── 不伸缩: 不增不减 └-- 性能稳定 有界队列: ├── queue_size: 1000 ├── 容量: 固定大小 ├── 满时: 拒绝新请求 └-- 保护系统 任务执行: ├── 并发执行: size 个任务 ├── 等待任务: 最多 1000 个 ├── 超过: 拒绝 ❌ └-- 保证稳定性 ``` ## size 设置影响 ``` size 值的影响分析 size = CPU核心数 (默认): ├── 并发能力: 与 CPU 匹配 ├── I/O 等待: 良好利用 ├── 上下文切换: 最小 ├-- 资源利用: 最优 ✅ └-- 适用: 大多数场景 ✅ size = CPU核心数 / 2: ├── 并发能力: 较低 ├-- I/O 等待: 未充分利用 ├── 上下文切换: 少 ├── 资源利用: 不足 └-- 适用: I/O 快的存储 size = CPU核心数 × 2: ├── 并发能力: 较高 ├-- I/O 等待: 充分利用 ├── 上下文切换: 较多 ⚠️ ├── 资源利用: 过度 └-- 适用: 高延迟存储 size > CPU核心数 × 2: ├── 并发能力: 不再提升 ├── 上下文切换: 频繁 ❌ ├── 性能可能下降 ❌ └-- 不推荐 ❌ ``` ## 为什么默认值是 CPU 核心数 ``` 默认值设计原理 Get 操作特点: ├── I/O 密集型 │ ├── 从磁盘读取 │ ├── 解压缩 │ └── 反序列化 │ ├── 需要 CPU │ ├── 数据处理 │ ├── 字段提取 │ └── 权限检查 │ └── 混合型操作 为什么是 CPU 核心数: ├── I/O 等待时 CPU 可处理其他请求 ├── 平衡 I/O 和 CPU 利用 ├-- 最小化上下文切换 ├── 最大化吞吐量 ✅ └-- 经过验证的配置 ``` ## 配置建议 ## 默认配置(推荐) ```yaml thread_pool: get: size: 4 # 假设 4 核 CPU ``` **建议**: 使用默认值(等于 CPU 核心数)。 ## 高延迟存储 ```yaml thread_pool: get: size: 8 # 增加线程数 ``` **建议**: 网络存储或高延迟磁盘时使用。 ## 低延迟存储 ```yaml thread_pool: get: size: 2 # 减少线程数 ``` **建议**: 极速 SSD 存储可以使用。 ## 动态更新 ```json PUT /_cluster/settings { "transient": { "thread_pool.get.size": 8 } } ``` ## 代码示例 ## 基础配置 ```yaml thread_pool: get: size: 4 ``` ## 完整配置 ```yaml thread_pool: get: size: 4 queue_size: 1000 ``` ## 单文档获取 ```json GET /my_index/_doc/1 ``` ## 批量获取 ```json GET /_mget { "docs": [ {"_index": "my_index", "_id": "1"}, {"_index": "my_index", "_id": "2"} ] } ``` ## 查看线程池状态 ```bash GET /_cat/thread_pool/get?v ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `get.size` | 线程池大小 | CPU核心数 | | `get.queue_size` | 队列大小 | 1000 | ## 注意事项 1. **默认值**: 默认值等于 CPU 核心数,推荐保持。 2. **动态更新**: 支持动态更新,无需重启。 3. **I/O 特性**: Get 操作是 I/O 密集型,等待时 CPU 可以处理其他请求。 4. **合理设置**: 通常不需要超过 CPU 核心数的 2 倍。 5. **队列配合**: 应与 `queue_size` 配合调整。 6. **监控建议**: 监控队列长度和拒绝率。 7. **性能测试**: 调整后应进行性能测试。 8. **存储类型**: 根据存储延迟调整。 9. **集群一致性**: 建议集群中各节点保持一致。 10. **上下文切换**: 过多线程会导致频繁的上下文切换。 ## 使用场景 ``` 场景选择指南 本地 SSD (极低延迟): ├── size: CPU核心数 ├── 特点: I/O 延迟极低 ├-- 并发: 不需要过高 └-- 推荐: 默认配置 ✅ SAN/NAS (中等延迟): ├── size: CPU核心数 ├── 特点: I/O 延迟中等 ├-- 并发: 默认值合适 └-- 推荐: 默认配置 ✅ 网络存储 (高延迟): ├── size: CPU核心数 × 1.5-2 ├-- 特点: I/O 等待长 ├── 并发: 需要更高 └-- 推荐: 适当增加 混合负载: ├── size: CPU核心数 ├── 特点: 多种操作混合 ├-- 并发: 平衡配置 └-- 推荐: 默认配置 ✅ ``` ## 性能调优 ``` size 值调优指南 调优原则: ├── 从默认值开始 ├── 根据存储类型调整 ├── 监控性能指标 ├── 测试不同配置 └-- 避免过度配置 调优步骤: 1. 评估存储特性 ├── SSD: 低延迟 → 保持默认 ├── HDD: 高延迟 → 可以增加 ├── 网络: 不确定 → 测试决定 └-- 测量 I/O 延迟 2. 设置初始值 ├── 默认: CPU 核心数 ├── 高延迟: × 1.5 ├── 极高延迟: × 2 └-- 不建议超过 × 2 3. 监控指标 ├── 线程池活跃线程数 ├── 队列长度 ├── 拒绝率 ├── 平均响应时间 └-- CPU 使用率 4. 调整配置 ├── 队列满 + 拒绝 → 增加 ├── 队列空 + 线程闲 → 可以减少 ├── 响应时间增加 → 可能过度 └-- 找到最佳平衡点 5. 验证效果 ├── 压力测试 ├── 性能对比 ├── 稳定性测试 └-- 确认最佳配置 ``` ## 最佳实践 ``` Get 线程池最佳实践 1. 使用默认值 ├── size = CPU 核心数 ├── 最适合大多数场景 ├── 经过充分验证 └-- 性能最优 ✅ 2. 根据存储调整 ├── 低延迟存储: 默认值 ├── 中延迟存储: 默认值 ├── 高延迟存储: × 1.5 └-- 极高延迟: × 2 3. 监控队列状态 ├── 监控队列长度 ├── 监控拒绝率 ├── 监控响应时间 └-- 及时发现问题 4. 配合 queue_size ├── 保持默认 1000 ├── 高并发时可以增加 ├── 低并发时可以减少 └-- 平衡资源 5. 定期审查 ├── 定期检查配置 ├── 评估性能变化 ├── 根据负载调整 └-- 保持优化 ```