首页/数据/Redis 进阶速查/MEMORY MALLOC-STATS 分配器细节
内存与管理99 条

MEMORY MALLOC-STATS 分配器细节

MEMORY MALLOC-STATS 输出分配器(通常 jemalloc)的分级统计,用于确认内部分配区与碎片结构,属于深度排查工具。

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

MEMORY MALLOC-STATS 是什么

MEMORY MALLOC-STATS 把底层分配器的内部统计原样打印出来,包含各尺寸档的分配次数与字节数、活跃页与已分配页等信息,用于回答「碎片到底堆在哪些对象尺寸上」,属于碎片根因分析的深度工具而不是日常巡检命令。

基本信息

命令MEMORY MALLOC-STATS
起始版本Redis 4.0
依赖默认构建为 jemalloc,输出即 jemalloc 的统计
输出分配器原生文本,篇幅较长
定位二级排查工具,建议先跑 MEMORY DOCTOR

典型使用场景

  • DOCTOR 提示碎片偏高,需要确认是哪些尺寸档在堆积
  • 怀疑大量小对象反复分配导致 rss 长期不回落
  • 对比升级版本或更换构建前后的分配行为差异
  • 把原始统计交给 jemalloc 生态的分析工具做进一步解读
  • 排查内存告警时,作为向厂商或社区求助的证据材料

采集与分析入口

采集与分析入口
redis-cli INFO memory | grep mem_allocator        # 先确认是不是 jemalloc 构建
redis-cli MEMORY MALLOC-STATS > malloc-stats.txt  # 输出很长,重定向到文件再分析
grep -n '^bins:' malloc-stats.txt | head          # 定位尺寸桶统计段
head -20 malloc-stats.txt                          # 先看总体计数与字节数
redis-cli MEMORY DOCTOR > doctor.txt              # 两份材料一起留档

重点看什么

段落含义用途
allocated / active分配器视角的已分配字节与活跃页两者差距越大,说明碎片越多
bins各尺寸档的分配计数找出被高频使用的对象尺寸档
large大块分配统计与单键体积偏大、大集合对象对应
mapped / resident映射与常驻内存解释进程 rss 与分配器统计的差异
输出属于实现细节,跨版本格式不同,不要写成固定解析规则;日常巡检用 INFO memory 加 MEMORY DOCTOR 已经足够。

排查顺序建议

  • 第一步 INFO memory,确认 rss、碎片率与分配器名称
  • 第二步 MEMORY DOCTOR,拿到结论式提示再决定方向
  • 第三步 MEMORY STATS,看 overhead 与峰值等结构化字段
  • 第四步才用 MALLOC-STATS,深入尺寸档定位碎片来源
  • 每一步的原始输出都留档,便于事后复核与对比
统计是抓取时刻的快照,不包含历史;要观察趋势必须按固定周期采集并保存原始文件,否则只能看到当下的切片。

易错点

  • 输出含大量实现细节,解读门槛高,跳过 MEMORY DOCTOR 直接看会浪费时间
  • 把它当常规巡检命令周期采集,输出巨大却没人看
  • 在非 jemalloc 构建上执行拿不到同样结构,误判成异常
  • 只留结论不留原始输出,事后无法复核碎片是否真的收敛

数据来源与参考

  • Redis 官方文档:内存诊断命令
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌