INFO cpu 是什么
INFO cpu 给出 Redis 主进程与后台子进程累计消耗的 CPU 秒数,分系统态与用户态两组。子进程两项主要由 RDB 保存、AOF 重写这类 fork 任务贡献;主进程两项反映命令处理与网络开销。注意它们是自进程启动以来的累计值,要得到使用率必须自己按时间做差值。
基本信息
| 查看 | redis-cli INFO cpu |
|---|---|
| 主进程字段 | used_cpu_sys、used_cpu_user(累计秒) |
| 子进程字段 | used_cpu_sys_children、used_cpu_user_children |
| 主线程口径 | Redis 6.2 起另有 used_cpu_sys_main_thread、used_cpu_user_main_thread |
| 字段性质 | 累计值,不随时间窗口自动重置 |
| 配套观测 | INFO persistence、top、pidstat |
典型使用场景
- 排查延迟抖动:确认尖峰是否与子进程工作(fork、重写)同期出现
- 判断是否打满单核:主线程 CPU 长期接近满载说明命令层已成瓶颈
- 区分瓶颈类型:用户态高是命令重,系统态高是系统调用与网络开销重
- 持久化影响评估:把重写期间的子进程 CPU 与延迟曲线对照
- 容量评估:按分钟对累计值做差值,得出真实 CPU 占用率
最小示例
最小示例
redis-cli INFO cpu # 累计 CPU 秒数
redis-cli INFO persistence | grep -E 'rdb_bgsave_in_progress|aof_rewrite_in_progress|latest_fork_usec'
redis-cli INFO commandstats | grep -E 'cmdstat_(hgetall|keys|smembers)' # 找重命令
redis-cli --latency-history -i 5 # 延迟随时间的变化
pidstat -p <redis_pid> 1 5 # 用系统工具看真实占用率字段读法
| 字段 | 含义 | 异常信号 |
|---|---|---|
| used_cpu_sys | 主进程累计系统态 CPU 秒 | 与用户态比值高说明系统调用开销大 |
| used_cpu_user | 主进程累计用户态 CPU 秒 | 持续快速增长说明命令负担重 |
| used_cpu_sys_children | 子进程累计系统态 CPU 秒 | 明显增长说明后台持久化在跑 |
| used_cpu_user_children | 子进程累计用户态 CPU 秒 | 与 RDB/AOF 重写时间点对照看 |
| 两次采样的差值与间隔 | 自己计算的使用率 | 主线程长期接近单核满载即瓶颈信号 |
单看一次输出没有意义:这些都是只增不减的累计值,采集时同时记录时间戳,用相邻两点的差值除以间隔才是真实使用率。
命令执行依然是单线程:主线程打满一个核时再加核也帮不上忙,方向是拆分实例、分片或减少重命令。
子进程 CPU 升高不等于故障,它往往说明持久化正在正常工作;真正要关注的是它与延迟抖动、fork 耗时是否同期出现。