--- title: "缓存回收器页面类型配置" date: 2026-02-06 lastmod: 2026-02-06 description: "控制缓存回收器页面类型的配置项说明" tags: ["缓存配置", "内存管理", "性能调优"] summary: "配置项作用 # cache.recycler.page.type 配置项控制缓存回收器(Cache Recycler)的页面回收策略类型。缓存回收器负责管理内存页面的分配和回收,此配置决定了回收器的并发行为和性能特征。 配置项类型 # 该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。 默认值 # CONCURRENT 是否必需 # 可选配置项(有默认值) 取值范围 # CONCURRENT - 并发回收模式 IDENTITY - 身份模式(不使用回收器) 配置格式 # # 默认配置(并发回收) cache.recycler.page.type: CONCURRENT # 身份模式 cache.recycler.page.type: IDENTITY 相关配置项 # 配置项 默认值 说明 cache.recycler.page.type CONCURRENT 页面回收类型 cache.recycler.page.limit.heap 10% 堆内存限制 工作原理 # 缓存回收器类型机制: ┌─────────────────────────────────────────────────────────────────┐ │ 缓存回收器类型对比 │ └─────────────────────────────────────────────────────────────────┘ CONCURRENT 模式: │ ├── 多线程并发回收 │ ├── 允许同时分配和回收 │ ├── 使用并发数据结构 │ └── 更好的并发性能 │ └── 适合高并发场景 IDENTITY 模式: │ ├── 简单包装器 │ ├── 不使用回收机制 │ ├── 直接分配/释放 │ └── 更低的并发开销 │ └── 适合低并发或调试场景 两种类型对比 # CONCURRENT vs IDENTITY: CONCURRENT: 优点: ✓ 支持并发访问 ✓ 自动回收内存 ✓ 内存利用率高 ✓ 适合生产环境 缺点: ✗ 更多的并发控制开销 ✗ 更复杂的实现 ✗ 可能出现竞争 IDENTITY: 优点: ✓ 简单直接 ✓ 较少的并发开销 ✓ 调试友好 ✓ 可预测的行为 缺点: ✗ 不支持自动回收 ✗ 可能导致内存碎片 ✗ 不适合高并发场景 ✗ 生产环境不推荐 使用场景 # 1." --- ## 配置项作用 `cache.recycler.page.type` 配置项控制缓存回收器(Cache Recycler)的页面回收策略类型。缓存回收器负责管理内存页面的分配和回收,此配置决定了回收器的并发行为和性能特征。 ## 配置项类型 该配置项为**静态配置**,需要在启动时设置,修改后需要重启节点才能生效。 ## 默认值 ``` CONCURRENT ``` ## 是否必需 **可选配置项**(有默认值) ## 取值范围 ``` CONCURRENT - 并发回收模式 IDENTITY - 身份模式(不使用回收器) ``` ## 配置格式 ```yaml # 默认配置(并发回收) cache.recycler.page.type: CONCURRENT # 身份模式 cache.recycler.page.type: IDENTITY ``` ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `cache.recycler.page.type` | CONCURRENT | 页面回收类型 | | `cache.recycler.page.limit.heap` | 10% | 堆内存限制 | ## 工作原理 缓存回收器类型机制: ``` ┌─────────────────────────────────────────────────────────────────┐ │ 缓存回收器类型对比 │ └─────────────────────────────────────────────────────────────────┘ CONCURRENT 模式: │ ├── 多线程并发回收 │ ├── 允许同时分配和回收 │ ├── 使用并发数据结构 │ └── 更好的并发性能 │ └── 适合高并发场景 IDENTITY 模式: │ ├── 简单包装器 │ ├── 不使用回收机制 │ ├── 直接分配/释放 │ └── 更低的并发开销 │ └── 适合低并发或调试场景 ``` ## 两种类型对比 ``` CONCURRENT vs IDENTITY: CONCURRENT: 优点: ✓ 支持并发访问 ✓ 自动回收内存 ✓ 内存利用率高 ✓ 适合生产环境 缺点: ✗ 更多的并发控制开销 ✗ 更复杂的实现 ✗ 可能出现竞争 IDENTITY: 优点: ✓ 简单直接 ✓ 较少的并发开销 ✓ 调试友好 ✓ 可预测的行为 缺点: ✗ 不支持自动回收 ✗ 可能导致内存碎片 ✗ 不适合高并发场景 ✗ 生产环境不推荐 ``` ## 使用场景 ### 1. 默认配置(推荐) ```yaml cache.recycler.page.type: CONCURRENT ``` **适用场景:** - 所有生产环境 - 高并发访问 - 需要自动内存管理 ### 2. 调试模式 ```yaml cache.recycler.page.type: IDENTITY ``` **适用场景:** - 性能调试 - 内存问题诊断 - 开发测试环境 - 禁用回收器 ## 推荐设置建议 | 环境 | 推荐类型 | 说明 | |-----|---------|------| | 生产环境 | CONCURRENT | 并发性能优先 | | 开发测试 | CONCURRENT | 保持一致性 | | 性能调试 | IDENTITY | 简化问题定位 | | 低并发 | CONCURRENT | 仍推荐使用 | ## 内存管理影响 ``` 对内存管理的影响: CONCURRENT 模式: - 自动回收内存页面 - 重用已释放的页面 - 减少内存分配次数 - 提高内存利用率 IDENTITY 模式: - 不回收内存页面 - 每次分配新页面 - 依赖 GC 回收内存 - 可能增加 GC 压力 ``` ## 配置示例 ```yaml # 场景 1: 标准生产集群 cluster.name: prod-cluster cache.recycler.page.type: CONCURRENT # 场景 2: 性能调试集群 cluster.name: debug-cluster cache.recycler.page.type: IDENTITY # 场景 3: 高性能集群 cluster.name: perf-cluster cache.recycler.page.type: CONCURRENT ``` ## 监控建议 ```bash # 查看当前配置 GET /_nodes/settings?filter_path=*.cache.recycler.page.type # 查看内存使用 GET /_nodes/stats/jvm?filter_path=**.heap # 查看 GC 统计 GET /_nodes/stats/jvm?filter_path=**.gc # 查看缓存统计 GET /_nodes/stats/indices?filter_path=**.cache ``` ## 性能影响分析 ``` 不同类型对性能的影响: CONCURRENT: 并发性能: - 高并发下性能更好 - 减少锁竞争 - 支持多线程分配 内存性能: - 页面重用 - 减少分配开销 - 降低 GC 压力 IDENTITY: 并发性能: - 低并发下性能相近 - 减少并发控制开销 - 高并发下可能成为瓶颈 内存性能: - 无页面重用 - 增加分配开销 - 增加 GC 压力 ``` ## 故障排查 ``` 内存相关问题排查: 问题 1: 内存使用持续增长 排查: 1. 检查回收器类型 GET /_nodes/settings?filter_path=*.cache.recycler.page.type 2. 检查内存使用 GET /_nodes/stats/jvm?filter_path=**.heap 3. 检查 GC 情况 GET /_nodes/stats/jvm?filter_path=**.gc 解决: - 确保使用 CONCURRENT - 检查 heap 限制配置 - 分析内存泄漏问题 问题 2: 并发性能差 排查: 1. 检查回收器类型 2. 分析线程争用 3. 检查缓存使用模式 解决: - 确保使用 CONCURRENT - 优化缓存访问模式 ``` ## 注意事项 1. **静态配置**:修改需要重启节点 2. **默认推荐**:生产环境应使用 CONCURRENT 3. **性能影响**:直接影响内存管理性能 4. **调试使用**:IDENTITY 主要用于调试场景 5. **并发考虑**:高并发环境必须使用 CONCURRENT 6. **内存泄漏**:IDENTITY 模式可能暴露内存问题