字段口径要先分清
INFO memory 的输出按口径分成几组:分配器统计口径的 used_memory 系列、操作系统视角的 rss 系列、峰值与碎片率,以及各功能模块的占用。设告警前必须分清口径:used_memory 是 Redis 自己记录的分配量,used_memory_rss 是操作系统看到的常驻内存,两者相差较大时说明存在碎片、未归还内存或换页。
基本信息
| 查看命令 | redis-cli INFO memory / MEMORY STATS / MEMORY USAGE <key> |
|---|---|
| 分配器口径 | used_memory、used_memory_peak、used_memory_overhead |
| 系统口径 | used_memory_rss、mem_fragmentation_ratio |
| 上限口径 | maxmemory 与 maxmemory_policy |
| 单位 | 全部为字节,监控侧需自行换算 |
典型使用场景
- 制定内存告警阈值,先确定用哪个字段作为使用率分子
- 排查内存缓慢上涨:区分是数据集增长还是客户端缓冲等开销上涨
- 重启后对比峰值字段,确认是否有异常的内存尖峰
- 容量评审时按数据集大小与开销比例推算需要的内存规格
- 碎片率偏高时判断是否需要用内存整理或滚动重启回收
查看示例
查看示例
redis-cli INFO memory # 一次拿到全部内存字段
redis-cli INFO memory | grep -E 'used_memory:|used_memory_rss|mem_fragmentation_ratio'
redis-cli MEMORY STATS # 更细的分项统计
redis-cli MEMORY USAGE mykey # 单个键的实际占用,排查大键字段对照
| 字段 | 含义 | 异常表现 |
|---|---|---|
| used_memory | 分配器口径的总内存 | 持续逼近 maxmemory 时淘汰或拒写开始出现 |
| used_memory_rss | 操作系统视角的常驻内存 | 显著高于 used_memory 说明碎片或未归还 |
| used_memory_peak | 历史峰值 | 峰值贴近机器物理内存说明余量不足 |
| mem_fragmentation_ratio | rss 与 used_memory 的比值 | 大于 1.5 偏高,小于 1 需警惕换页 |
| maxmemory | 配置的可用上限 | 为 0 表示未限制,容器中易被内核杀掉 |
一次内存排查的顺序
- 先看 used_memory 对 maxmemory 的占比,判断是否已经接近淘汰或拒写的边界
- 再拆数据集与开销两块,确认涨的是业务数据还是连接与缓冲类的固定开销
- 用 MEMORY USAGE 抽查几个大键,排除个别键异常膨胀造成整体占用上升
- 对比 used_memory_rss 与碎片率,判断是否存在碎片堆积或内存被换出
- 最后再看峰值字段与历史曲线,确定是缓慢增长还是一次性尖峰
告警通常以 used_memory 相对 maxmemory 的占比为主,rss 用于观察碎片与系统压力,两者分工不同,不要混用一条阈值。
不同版本新增或调整过内存字段,升级后要核对监控脚本解析的字段名是否仍存在,否则会出现静默采集失败。