VPS 明明只有一个网站,CPU 使用率看起来也不高,页面却会突然卡住,SSH 输入命令还要等半天。遇到这种情况,新手很容易先怀疑程序、数据库或带宽,却忽略了虚拟化环境里的 CPU steal。
我以前排查低价 VPS 卡顿时,也碰到过负载不高、内存有余量、磁盘没有跑满,但晚高峰响应明显变慢的情况。继续看 top 才发现,真正异常的是 %st,也就是虚拟机等待宿主机分配 CPU 的时间。

今天这篇文章就来聊聊,CPU steal 到底是什么、多少算异常、怎么判断是不是宿主机资源紧张或超售,以及发现问题后应该怎么处理。
一、CPU steal到底是什么?
VPS 并不是独占一整台物理服务器。服务商会通过 KVM、Xen 等虚拟化技术,把宿主机的 CPU、内存和磁盘分配给多台虚拟机。你的 VPS 看见了 2 个或 4 个虚拟核心,但这些核心背后仍然要和同一宿主机上的其他实例共享物理 CPU 时间。
CPU steal 可以理解为:虚拟机本来已经准备运行任务,却因为宿主机正忙着处理其他虚拟机,只能继续等待的时间比例。Linux 会把这部分时间记录下来,top、iostat、sar 等工具再把它显示成 %st 或 %steal。
所以 CPU steal 高,并不代表你自己的程序吃满了 CPU。它更像是资源已经排队,但物理主机暂时没有把运行时间分给你。
二、CPU使用率不高,为什么服务器还是会卡?
普通 CPU 使用率主要统计虚拟机已经拿到 CPU 之后的消耗。CPU steal 反映的则是任务想运行却没有及时获得 CPU 的时间,两者不是同一个指标。
例如网站请求只需要几十毫秒计算,但每次执行前都要等待宿主机调度,最终响应时间就可能拉长。你看到的业务进程 CPU 占用不高,用户却会感觉页面偶发卡顿、接口延迟忽高忽低。
这类问题在晚高峰更明显,因为同一宿主机上的其他 VPS 也在集中使用资源。CPU steal 的特点往往不是全天持续高,而是在固定时段出现尖峰。
三、怎么查看CPU steal?
最直接的方法是在 Linux VPS 中运行:
top
在顶部 CPU 信息中找到 st。不同系统显示格式略有差异,例如:
%Cpu(s): 8.0 us, 2.0 sy, 75.0 id, 5.0 wa, 10.0 st
这里的 10.0 st 表示采样期间大约有 10% 的 CPU 时间被宿主机拿走。想连续观察,可以安装 sysstat 后运行:
sar -u 1 60
不要只截取某一秒的数据。更有价值的做法是连续监控 10—30 分钟,并分别记录白天和晚高峰结果,再对照网站响应时间。
四、CPU steal多少算异常?
| %st范围 | 常见表现 | 建议 |
|---|---|---|
| 0%—2% | 基本无感 | 正常观察 |
| 2%—5% | 偶尔波动 | 结合延迟继续监控 |
| 5%—10% | 可能出现卡顿 | 检查是否持续或集中在晚高峰 |
| 10%以上 | 响应明显受影响 | 联系服务商迁移或更换实例 |
短暂跳到 5% 并不一定有问题,升级、备份或宿主机维护都可能造成波动。真正值得警惕的是 持续多分钟超过 5%,或业务卡顿时同步升高到 10% 以上。
对实时 API、数据库、游戏服务和交易程序来说,即使平均值不高,频繁尖峰也会影响体验。
五、怎么判断是超售还是自己的程序问题?
先同时观察 CPU、内存、磁盘 IO 和 CPU steal。程序自身负载过高时,us、sy 或 load average 往往会上升;磁盘阻塞时 wa 更明显;宿主机争抢严重时,则是 st 上升。
可以按这个顺序排查:
- 用 top 或 htop 查看进程 CPU 和 %st。
- 用 free -h 检查可用内存和 Swap。
- 用 iostat -x 1 观察磁盘等待和利用率。
- 在卡顿时记录网站 TTFB、Ping 和 %st。
超售并不等于看到一次 CPU steal 就能下结论。只有自身资源没有跑满、网络没有异常,而 %st 与卡顿长期同步出现时,宿主机资源争抢才更值得怀疑。
六、发现CPU steal过高怎么处理?
重启 VPS 可能暂时缓解,但它不会改变宿主机的资源分配。服务商若把实例重新调度到其他宿主机,问题才可能真正消失;单纯在原节点重启,过一段时间往往还会回来。
先把监控数据、出现时间、节点位置和实例 ID 发给服务商,请对方检查宿主机负载或协助迁移。沟通时不要只说服务器很卡,提供 %st 截图和时间段更容易定位。
长期项目选择 VPS 时,除了价格,还要看节点负载、退款测试周期、升级空间和售后响应。需要多地区节点时,可以自然对比 萤光云 与 LightNode,先按实际业务做短周期监控,再决定是否长期使用。
七、升级CPU能不能解决?
自己的程序并发增加时,升级 CPU 核心数可能有效。但 CPU steal 来自宿主机层面的资源争抢,原节点上增加虚拟核心不一定能解决,甚至可能只是让更多虚拟核心一起等待。
进程 CPU 长期跑满适合升级配置,CPU steal 长期偏高更适合迁移节点或更换宿主机。两种问题看起来都像服务器卡,处理方向完全不同。
八、我的实际建议
排查 VPS 性能时,我现在都会先看 us、wa 和 st,而不是只盯着总 CPU 百分比。这样能快速区分程序计算、磁盘等待和宿主机争抢。
低价 VPS 偶尔出现一点 steal 并不意外,但正式网站不能只看一次跑分。至少观察一天中的多个时段,尤其是目标用户访问最集中的时间,才更接近真实体验。
常见问题
问:CPU steal为0就代表VPS没有超售吗?
答:不能完全证明,只能说明采样时没有明显CPU争抢。
问:Windows VPS能查看CPU steal吗?
答:系统默认不直观,需借助虚拟化监控或服务商数据。
问:CPU steal偶尔达到5%需要迁移吗?
答:短暂波动先观察,持续出现再联系服务商。
问:重装系统能解决CPU steal吗?
答:基本不能,因为问题通常位于宿主机层。
问:独享CPU会不会出现CPU steal?
答:风险更低,但仍要看服务商的实际资源隔离。
温馨提示
服务器卡顿不一定是配置不够。看到 CPU 不高时,不要马上升级套餐,先检查 CPU steal、磁盘 IO、内存余量和网络延迟。找准瓶颈,比盲目加核心更有效。
正式业务最好保留一段时间的监控记录。只有数据能说明问题发生在哪个时间、持续多久,以及迁移或升级后是否真的改善。

