Redis 线上 CPU 100% 突发排查:大 Key 与慢查询治理实操

举报
yd_218612773 发表于 2026/11/05 09:07:06 2026/11/05
【摘要】 Redis 节点 CPU 占用突然被打满导致所有请求超时。本文记录使用 SLOWLOG、bigkeys 命令抓取故障源并在线平滑清理的避坑经验。

线上 Redis 实例监控突发告警,CPU 使用率直逼 99%,导致关联的多个核心业务服务出现超时和限流。

一、线上应急与排查

登录 Redis 终端,首先检查慢查询日志:

127.0.0.1:6379> SLOWLOG GET 5
1) 1) (integer) 3412
   2) (integer) 1698471205
   3) (integer) 482012 # 耗时达 482ms
   4) 1) "HGETALL"
      2) "cache:user:active_records_202610"

发现存在耗时接近 500ms 的 HGETALL 命令!由于 Redis 是单线程模型处理核心网络请求,一条耗时数百毫秒的命令足以阻塞后续成千上万个请求。

二、BigKey 扫描与定位

使用 Redis 自带的 --bigkeys 工具在从库进行无阻塞采样扫描:

redis-cli -h 127.0.0.1 -p 6379 -a 'password' --bigkeys

扫描结果显示:该 Hash 类型的 key 包含超过 280,000 个 field,体积达到 45MB,属于典型的大 Key。

三、安全整改方案

  1. 杜绝全量拉取:严禁在线上直接执行 HGETALL、KEYS * 等 O(N) 级别高危命令,改用分批迭代查询 HSCAN 或按需执行 HMGET。
  2. 大 Key 异步删除:对于大 Key 绝对不能直接使用 DEL 命令(会产生主线程秒级阻塞),必须使用非阻塞删除 UNLINK key。

通过执行 UNLINK cache:user:active_records_202610,Redis 实例 CPU 占用迅速回落至 5% 的健康区间。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。