配置项作用 #
cache.recycler.page.limit.heap 配置项用于控制页面缓存回收器(Page Cache Recycler)可以使用的最大堆内存量。该回收器负责缓存和重用固定大小的内存页(16KB),包括 byte[]、int[]、long[] 和 Object[] 四种类型,以减少频繁的内存分配和垃圾回收开销。
通过合理设置此配置,可以在内存使用效率和性能之间取得平衡。
配置项类型 #
该配置项为静态配置,需要在 easysearch.yml 配置文件中设置,修改后需要重启节点才能生效。
默认值 #
10% (JVM 堆内存的 10%)
是否必需 #
可选配置项(有默认值)
取值格式 #
<百分比>% 或 <字节值>
- 百分比:基于 JVM 堆内存大小计算,如
5%、10% - 字节值:指定具体的字节数,如
100mb、1gb
配置格式 #
# easysearch.yml
# 默认配置
cache.recycler.page.limit.heap: 10%
# 增加缓存大小
cache.recycler.page.limit.heap: 20%
# 禁用页面缓存
cache.recycler.page.limit.heap: 0%
# 指定具体大小
cache.recycler.page.limit.heap: 200mb
工作原理 #
┌─────────────────────────────────────────────────────────────────┐
│ 页面缓存内存分配机制 │
└─────────────────────────────────────────────────────────────────┘
JVM 堆内存
│
├── cache.recycler.page.limit.heap (如 10%)
│ │
│ ├── 根据 weight 分配给不同类型
│ │ │
│ │ ├── byte[] pages (weight: 1.0)
│ │ ├── int[] pages (weight: 1.0)
│ │ ├── long[] pages (weight: 1.0)
│ │ └── Object[] pages (weight: 0.1)
│
└── 其他用途(索引、查询缓存等)
页面规格:
- 页面大小固定:16KB (16384 字节)
- byte[] 页面:16KB / 1 = 16,384 字节
- int[] 页面:16KB / 4 = 4,096 个 int
- long[] 页面:16KB / 8 = 2,048 个 long
- Object[] 页面:16KB / 8(引用大小)= 2,048 个引用
内存分配计算 #
假设堆内存为 4GB,cache.recycler.page.limit.heap: 10%:
总缓存大小 = 4GB × 10% = 400MB
最大页面数 = 400MB / 16KB ≈ 25,600 页
各类型分配(默认权重):
- byte[]: 1.0 / 3.1 × 25,600 ≈ 8,258 页
- int[]: 1.0 / 3.1 × 25,600 ≈ 8,258 页
- long[]: 1.0 / 3.1 × 25,600 ≈ 8,258 页
- Object[]: 0.1 / 3.1 × 25,600 ≈ 826 页
使用场景 #
1. 默认配置(推荐) #
cache.recycler.page.limit.heap: 10%
适用于大多数场景,平衡了内存使用和性能。
2. 大内存节点 #
cache.recycler.page.limit.heap: 20%
对于堆内存较大(如 32GB+)的节点,可适当增加缓存大小。
3. 内存受限环境 #
cache.recycler.page.limit.heap: 5%
对于内存紧张的环境,减少缓存以节省内存。
4. 禁用缓存 #
cache.recycler.page.limit.heap: 0%
完全禁用页面缓存,每次都新建对象。仅用于特殊调试场景。
相关配置 #
页面缓存的内存分配还受以下权重配置影响:
# 各类型页面的权重(相对重要性)
cache.recycler.page.weight.bytes: 1.0 # byte[] 页面权重
cache.recycler.page.weight.ints: 1.0 # int[] 页面权重
cache.recycler.page.weight.longs: 1.0 # long[] 页面权重
cache.recycler.page.weight.objects: 0.1 # Object[] 页面权重(默认较低)
# 回收器类型
cache.recycler.page.type: CONCURRENT # 可选: QUEUE, CONCURRENT, NONE
推荐设置建议 #
| 堆内存大小 | 推荐值 | 缓存大小 | 说明 |
|---|---|---|---|
| ≤ 4GB | 10% | ≤ 400MB | 默认配置即可 |
| 4-16GB | 10-15% | 400MB-2.4GB | 可适当增加 |
| 16-32GB | 15-20% | 2.4GB-6.4GB | 内存充足时可增加 |
| ≥ 32GB | 20% | ≥ 6.4GB | 大内存节点可提高 |
| SSD 存储 | 可提高 | - | SSD 支持更激进的缓存 |
| 内存受限 | 5-10% | - | 优先保证索引和查询内存 |
监控与调优 #
# 查看当前配置
GET /_nodes/settings?filter_path=nodes.*.cache.recycler
# 监控内存使用
GET /_nodes/stats/jvm?filter_path=nodes.*.jvm.mem
# 查看节点信息
GET /_nodes/stats
调优指南 #
- 监控 GC 行为:如果 GC 频率过高,可尝试增加缓存
- 监控内存使用:确保缓存不会挤占索引和查询内存
- 按需调整:根据实际工作负载特点调整各类型权重
- 分阶段调优:先调整整体限制,再调整各类型权重
注意事项 #
- 静态配置:修改此配置需要重启节点
- 内存总量:缓存来自堆内存,需与索引缓冲区、查询缓存等协调
- 权重平衡:调整某类型权重会影响其他类型的分配
- 页面粒度:内存按 16KB 页面分配,实际使用可能有少量偏差
- GC 影响:合理的缓存可减少 GC,但过大可能增加 GC 压力
- 所有节点一致:集群中各节点配置应保持一致





