jemalloc 与内存统计的关系
官方构建默认使用 jemalloc 作为内存分配器,它按尺寸分级管理内存页,回收节奏与常见的系统分配器不同。used_memory 反映的是分配器口径下已分配的内存,因此碎片表现、MEMORY MALLOC-STATS 的输出格式都与分配器实现相关;讨论碎片与回收前,先确认实例用的是哪个分配器。
基本信息
| 默认分配器 | jemalloc(官方构建) |
|---|---|
| 查看细节 | MEMORY MALLOC-STATS 输出分配器内部统计 |
| 统计口径 | used_memory 基于分配器记账 |
| 升级影响 | 尺寸分级与回收策略调整会带来占用与碎片差异 |
| 切换成本 | 更换分配器通常只能通过重建或重启 |
差异来源与应对
| 差异点 | 表现 | 应对 |
|---|---|---|
| 分配器不同 | 同数据量下 used_memory 与 rss 关系不同 | 对比前先确认分配器与构建一致 |
| 版本升级 | 尺寸分级与回收策略调整 | 升级后重新测量基线 |
| 运行时长 | 长期运行后碎片逐步累积 | 观察内存碎片率的长期趋势 |
| 大键删除 | 大块内存释放后未必立即归还操作系统 | 结合碎片率判断是否需要整理 |
查看命令
查看命令
redis-cli MEMORY MALLOC-STATS | head -20 # 分配器内部统计
redis-cli INFO memory | grep -E 'used_memory_human|used_memory_rss_human|mem_fragmentation_ratio'
redis-cli INFO memory | grep -E 'allocator_frag_ratio|allocator_rss_ratio'
redis-cli MEMORY STATS | head -20
redis-cli MEMORY PURGE # 请求分配器归还空闲内存,效果因实现与场景而异典型使用场景
- 内存对比前的一致性确认:确认口径与分配器相同
- 碎片排查:结合分配器统计判断碎片来源
- 版本升级前后基线:确认内存表现是否有系统性变化
- 容器内存上限评估:解释 rss 与 used_memory 的差异
- 复盘取证:说明内存占用与分配器行为的关系
更换分配器不是常规调优手段:除非明确知道收益来源与验证方式,否则保持官方构建的默认配置。
第三方构建可能改用系统分配器,此时 MEMORY MALLOC-STATS 的输出内容与格式会有差异,跨环境对比前先确认构建来源。