mem_fragmentation_ratio 的含义
mem_fragmentation_ratio 是 used_memory_rss 除以 used_memory:前者是操作系统看到的常驻内存,后者是分配器统计的逻辑数据用量。比值大于 1 说明进程占的物理内存多于数据本身,差额可能来自内存碎片、分配器留着复用的空闲页,或 fork 期间写时复制导致的额外占用;比值小于 1 通常意味着部分内存被换出到 swap,或系统做了内存压缩。它是信号不是结论,动手之前要结合碎片成因与系统内存状态一起看。
基本信息
| 计算方式 | used_memory_rss / used_memory |
|---|---|
| 查看命令 | redis-cli INFO memory |
| 常见区间 | 1.0 到 1.5 之间偏正常 |
| 偏高的含义 | 碎片或保留页较多,需进一步确认 |
| 小于 1 的含义 | 疑似换出或内存压缩 |
| 深入工具 | MEMORY DOCTOR、MEMORY STATS |
| 生效对象 | 整个实例,不区分业务 |
典型使用场景
- 内存水位巡检时判断 RSS 与逻辑用量差异是否在合理范围
- 收到高碎片告警,先确认是一次性波动还是持续上升
- 实例被容器 OOM 杀掉前,回看比值变化寻找线索
- 长期运行实例的内存基线校准,识别缓慢碎片化
- 评估是否值得开启主动碎片整理,需要量化当前碎片程度
- 排查 ratios 小于 1 的实例是否存在 swap 与延迟抖动
查看与分析
查看与分析
redis-cli INFO memory | grep -E 'mem_fragmentation_ratio' # 关键比值
redis-cli INFO memory | grep -E 'used_memory_rss|used_memory:'
redis-cli MEMORY DOCTOR # 官方体检,给出是否建议处理
redis-cli MEMORY STATS # 看分配器与各段的内存分布
free -m && swapon --show # 系统层确认是否使用 swap
redis-cli MEMORY PURGE # 请求分配器归还空闲页(有成本)比值区间与处置
| 比值 | 通常含义 | 下一步 |
|---|---|---|
| 约等于 1 | RSS 与逻辑用量一致 | 常态,无需动作 |
| 1.0 到 1.5 | 有碎片但可控 | 持续观察趋势 |
| 大于 1.5 | 碎片或保留页明显 | 结合 DOCTOR 判断是否整理或扩容 |
| 小于 1 | 内存被换出或压缩 | 查系统内存与 swap,别按碎片处理 |
比值只是信号不是结论:结合 MEMORY DOCTOR 的建议与系统内存水位一起看,再决定是整理、扩容还是不动。
fork 期间写时复制会让 RSS 短时上冲,持久化结束后自行回落,这时的比值尖峰不是碎片问题。
比值小于 1 时延迟往往比碎片更危险:换出与换入会把抖动带到命令执行路径上,优先级高于碎片治理。