CPU 高的排查路径
CPU 高有一条固定排查路径:先用 INFO cpu 分清主进程与子进程用量,再用 commandstats 找耗时占比高的命令,配合 SLOWLOG 抽样,然后核对是否存在大键操作、批量任务、集中过期或持久化并发,最后到系统层确认是否有其他进程争抢。
基本信息
| 服务端证据 | INFO cpu、INFO commandstats、SLOWLOG |
|---|---|
| 系统侧证据 | top、perf、mpstat 看进程内的热点 |
| 常见来源 | 复杂命令、大键操作、集中过期、RDB/AOF 子进程、碎片整理 |
| 区分对象 | 主进程用量与子进程用量必须分开看 |
| 相关开关 | hz、activedefrag、lazyfree 系列会影响 CPU 节奏 |
典型使用场景
- 发布后回归:升级或改配置后 CPU 抬升,按路径逐层定位
- 任务错峰:备份与统计类任务和业务高峰叠加
- 大批量写入:管道或批量命令把主线程压满
- 集中过期:键集中到期带来清理压力
- 持久化并发:子进程重写与大内存实例的 fork 开销
- 碎片整理:开启主动整理后 CPU 有额外成本
分层采集
分层采集
redis-cli INFO cpu # 主进程与子进程用量分开看
redis-cli INFO commandstats # 找耗时占比高的命令
redis-cli SLOWLOG GET 10 # 抽样看慢命令现场
redis-cli INFO stats | grep -E 'expired_keys|evicted_keys' # 过期与淘汰开销
redis-cli INFO persistence | grep -E 'bgsave_in_progress|aof_rewrite_in_progress' # 子进程是否在跑
redis-cli CONFIG GET activedefrag # 主动碎片整理开关
top -H -p $(pgrep -f redis-server | head -1) # 系统侧看线程级 CPU来源对照
| 来源 | 特征 | 处理方向 |
|---|---|---|
| 复杂命令 | 单次耗时高、调用量不大 | 命令改写或拆分 |
| 大键操作 | 延迟与 CPU 同时上升 | 拆分大键、改访问方式 |
| 集中过期 | expired_keys 激增 | 过期时间加随机抖动 |
| 持久化子进程 | 子进程 CPU 用量上升 | 重写任务错峰执行 |
| 碎片整理 | CPU 缓慢抬升、碎片率下降 | 按需开启或降低整理力度 |
主进程 CPU 高说明命令执行或定时任务吃紧;子进程 CPU 高则指向持久化与后台重写,两者的处理方式完全不同。
CPU 排查与延迟排查同源:把 CPU 曲线、命令统计和延迟事件放在同一时间轴上,才能决定该动哪一层。