steal 是什么
steal 表示 CPU 时间被宿主机上的其他虚拟机抢占,本机拿不到物理核心的时间片,这是虚拟化环境特有的指标。Linux 上用 top 的 %st 列或 vmstat 的 st 列观察。steal 偏高时 Redis 表现出的延迟尖峰与自身负载无关:命令处理变慢、定时任务被推迟、客户端看到的往返时间抖动,而实例的 CPU 使用率看起来并不高。
基本信息
| 查看方式 | top 的 %st 列、vmstat 的 st 列、mpstat 分核心 |
|---|---|
| 含义 | 被宿主机抢占、没能拿到物理 CPU 的时间占比 |
| 典型表现 | 延迟尖峰与自身负载无关,CPU 使用率却不高 |
| 处置方向 | 平台侧反馈与资源调整,换规格或错峰部署 |
| 配套排查 | 同时看宿主的资源争抢与实例自身的排队情况 |
典型使用场景
- 云主机延迟排查:实例侧指标全正常但延迟波动,steal 是第一批要排除的变量
- 共享宿主环境:同宿主其他租户突发负载时会连带受影响
- 定时任务抖动:后台任务被推迟,过期清理与超时检测变得不规律
- 规格选型:不同规格与宿主类型的 steal 表现差异明显
- 容量评估:长期处于高 steal 的实例,实测容量不能按纸面规格算
观测方法
观测方法
vmstat 1 # 每行的 st 列即 steal 占比
top -b -n 1 | head -5 # 顶部汇总行的 %st 列
mpstat -P ALL 1 3 # 分核心观察各核的 steal 与空闲
redis-cli --latency-history -i 5 # 延迟波动是否与 steal 上升同期指标读法
| 指标 | 含义 | 异常信号 |
|---|---|---|
| st(vmstat) | 被宿主抢占的 CPU 时间占比 | 持续非零且与延迟同期上升 |
| %st(top) | 同上,按全局汇总 | 平时接近零,突发抬升要留记录 |
| %idle | 空闲比例 | 空闲高而延迟差时优先怀疑外部因素 |
| 运行队列长度 | 等待 CPU 的任务数 | 自身排队与外部抢占要分开判断 |
共享宿主上的偶发毛刺,steal 是常见的解释变量;把它与延迟时间序列叠在一起看,比单次取值有效得多。
把 steal 抖动当成 Redis 问题排查,方向会一路跑偏:改配置、调参数都无效,最后仍要回到平台侧解决资源争抢。