Redis 线上 CPU 100% 突发排查:大 Key 与慢查询治理实操
【摘要】 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。
三、安全整改方案
- 杜绝全量拉取:严禁在线上直接执行
HGETALL、KEYS *等 O(N) 级别高危命令,改用分批迭代查询HSCAN或按需执行HMGET。 - 大 Key 异步删除:对于大 Key 绝对不能直接使用
DEL命令(会产生主线程秒级阻塞),必须使用非阻塞删除UNLINK key。
通过执行 UNLINK cache:user:active_records_202610,Redis 实例 CPU 占用迅速回落至 5% 的健康区间。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)