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,深入尺寸档定位碎片来源
- 每一步的原始输出都留档,便于事后复核与对比
统计是抓取时刻的快照,不包含历史;要观察趋势必须按固定周期采集并保存原始文件,否则只能看到当下的切片。