Redis内存突然暴涨?大厂如何排查?

Redis是大厂核心,下面我详解Redis内存突然暴涨?大厂如何排查@mikechen

第一层:确认是否有发布或变更

优先检查最近 30 分钟到 24 小时内是否有:

Redis内存突然暴涨?大厂如何排查?-mikechen

  • 应用发布;
  • 配置变更;
  • 定时任务变更;
  • Redis 参数变更;
  • 数据结构升级;

很多内存问题都与变更强相关,尤其是新版本引入了缓存粒度变细、key 数量暴涨、TTL 取消等问题。

 

第二层:看监控曲线

要同时看:

  • 内存曲线;
  • QPS 曲线;
  • 写命令比例;
  • key 数量变化;
  • 过期和淘汰数量;
  • 慢查询和阻塞情况;

Redis内存突然暴涨?大厂如何排查?-mikechen

因此,首先要看几个核心指标:

指标 含义 常见判断
used_memory Redis 分配器已使用内存 是否实际持续增长
used_memory_rss OS 实际驻留内存 明显高于 used_memory 时,可能是碎片、写时复制或内存未归还
mem_fragmentation_ratio RSS / Redis 使用内存 长期明显大于 1.5 需关注碎片;突发升高还要排查 fork/COW
used_memory_dataset 数据集本体内存 数据本身变大,通常是新写入、大 Key、TTL 失效
used_memory_overhead 元数据、客户端、复制缓冲等开销 连接/缓冲区/过期字典等非数据部分异常
mem_clients_normal 普通客户端缓冲区内存 高说明客户端读慢或连接堆积
mem_clients_slaves 副本客户端缓冲区内存 高说明副本延迟、全量同步或复制链路问题
evicted_keys 被驱逐 Key 数 增长说明已触及 maxmemory 并开始牺牲缓存
expired_keys 过期 Key 数 TTL 是否在正常工作
total_connections_received 累计连接数 突增常见于连接泄漏、连接池失效或流量异常

如果 used_memory 持续上涨,说明确实有数据增长;

如果 used_memory 平稳但 rss 飙升,则更可能是内存碎片或进程层面的峰值问题。

第三层:抽样分析 key

在不影响线上稳定性的前提下,抽样查看:

Redis内存突然暴涨?大厂如何排查?-mikechen

  • 大 key;
  • 热 key;
  • 同前缀 key 数量;
  • value 类型分布;

大厂会特别关注“结构性问题”,例如:

  • hash 里字段数过多
  • set 中元素无限增长
  • list 作为消息队列却未消费完
  • zset 排行榜长期不裁剪

这些问题表面上是 Redis 内存问题,本质上是业务模型设计问题。

 

第四层:应急处理:先止血,再优化

当内存已经逼近上限,必须先止血。

Redis内存突然暴涨?大厂如何排查?-mikechen

可采取的应急手段包括:

  • 临时限流写入流量
  • 下线异常任务或异常版本
  • 调整 TTL,减少新写入压力
  • 删除明显异常的大 key
  • 扩容 Redis 实例或迁移集群
  • 必要时重启实例,缓解碎片问题

但删除 key 要非常谨慎,不能只看大就删,必须确认业务可恢复性,否则可能引发更大范围故障。

总之,大厂的排查方式,核心不是“盯住一个指标”,而是通过监控、发布、日志、key 分布和配置五位一体地定位根因。

只有做到先判断现象、再锁定范围、最后验证假设,才能在最短时间内完成止血,并从根本上避免同类问题再次发生。

评论交流
    说说你的看法