首页/数据/Redis 进阶速查/jemalloc 分配器与内存统计
内存与管理99 条

jemalloc 分配器与内存统计

官方包默认使用 jemalloc,按尺寸分级管理内存页;used_memory 基于分配器口径,因此与 malloc 家族行为相关。

Redis 进阶速查数据更新于 2026-10-13

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 的输出内容与格式会有差异,跨环境对比前先确认构建来源。

易错点

  • 第三方构建换成了其他分配器,统计输出与内存表现不同,跨环境直接对比无效
  • 跨版本对比内存数据前不确认分配器与构建一致,结论不可靠
  • 把 rss 与 used_memory 的差值全归因于业务数据,忽略分配器与碎片
  • 指望 MEMORY PURGE 立刻降低内存,忽略其效果因实现与场景而异
  • 把更换分配器当常规优化手段,缺少收益验证与回滚方案

数据来源与参考

  • Redis 官方文档:内存分配器说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌