本文译自 kikomono.com 英文原文《VPS CPU steal time: check it before you trust a shared plan》,作者 Rita。原文链接:https://kikomono.com/guides/check-vps-cpu-steal-time/
简短回答
在共享 VPS 上,你的虚拟 CPU 要和同一台物理主机上的其他客户共享。CPU 偷取时间,就是你的虚拟 CPU 已经准备好运行、却因为宿主机先把物理核心给了别人而不得不等待的时间。这段时间追不回来,服务器里的任何设置也拿不回来。用一台典型 Linux 服务器上已有的工具就能查:top 里的 st 字段、vmstat 里的 st 列,或者 mpstat 里的 %steal 列。在真实工作负载下查,在一天的不同时段重复查,并把结果连同时间戳保存下来。一次安静时刻的读数什么也证明不了;繁忙时段的规律,才是给客服工单或迁移决定用的证据。
这项检查要在试用期或退款期内做,不要等到把线上网站搬上服务器之后再做。这就是关键:偷取时间是一项购买前的检查,不是一个调优技巧。
偷取时间是什么——以及不是什么
偷取时间不是 CPU 总使用率。一台服务器可以 CPU 使用率很高、偷取却几乎没有,这通常说明工作负载本身需要更多 CPU。一台服务器也可以 CPU 使用率很低、同时存在偷取,这说明等待发生在上游的共享主机上,而不是你自己的代码里。
偷取时间本身也不是服务商违约的证据。共享套餐没有公布的偷取保证——没有任何服务商会在共享套餐上承诺一个偷取数字——所以销售页上没有可以拿来对照的阈值。下面这些区间只是供你做决定的读数指南,不是服务商违反了的规格。
还有一个提醒:一直稳定在 0.0 是好消息,但也可能意味着这个平台根本不报告偷取。如果重负载下每次读数都恰好是零,先别急着庆祝——再拿你自己应用在负载下的延迟是否稳定当作第二信号,并问客服这个套餐是否报告偷取。
三种读同一个数字的方法
这些命令读的都是 Linux 内核里的同一个计数器,所以除了采样时间不同,结果应该一致。用已安装的那个就行;不要只为了这项检查就在现网站上装东西。
检查一:top,快速看一眼
运行 top,看 %Cpu(s) 这一行。最后一个字段 st 就是偷取。这是最快看到当前是否存在偷取的办法,但一屏 top 只是一个瞬间——它说不了昨晚繁忙时段的情况。
检查二:vmstat,短时观察
运行 vmstat 2 5,得到每两秒一次、共五次采样。st 列就是偷取。忽略第一行:那是自开机以来的平均值,不是当前读数。后面的行才是重要的实时采样。
检查三:mpstat,按核心看
如果 sysstat 软件包可用,运行 mpstat -P ALL 2 5。%steal 列按每个虚拟 CPU 显示偷取,这在某个核心被饿死、其他核心却空闲时很重要。如果想在变慢的窗口里看久一点,可以拉长采样,例如 mpstat -P ALL 1 60,就是六十次一秒采样。
怎么读这些数字
把下面这些区间当作读数指南,不要当作服务商的规格。不同指南划线略有不同,这本身就是把它当作决策参考、而不是裁决的理由。
- 0–1%,大多数时候:安静的共享主机或独享分配的典型表现;不用追查,繁忙时段还是要看。
- 短暂冲到几个百分点:正常的调度噪声;邻居在构建或主机在备份;忽略单次冲高,看规律。
- 共享套餐上持续 1–5%:共享 CPU 上预期的争用;价格本身就反映了共享;延迟可以接受就接受。
- 持续 5–10%:值得调查的明显争用;跨天记录证据;问客服能不能换节点。
- 持续数小时超过 10%:这套餐的表现已经不像你预期的 CPU 了;升级处理:换节点、换独享 CPU,或者换服务商。
“持续”对你意味着什么,取决于你的工作负载。一个通宵批处理任务可以扛住高偷取,没人察觉。一个对延迟敏感的服务,远在平均值看起来吓人之前,响应变慢就已经暴露了损害。判断偷取时要连同用户实际看到的响应时间一起看,不要只看数字本身。
试用流程:四次运行,不是一次快照
一台共享 VPS 在安静时刻三十秒里可以看起来很好,邻居一忙就垮掉。把检查当作一个小流程来跑,不要只跑一条命令。
- 空闲基线。服务器什么都不做时记录偷取。这能告诉你,在你的工作负载开始之前,主机是不是已经争用了。
- 真实工作负载下。跑你实际打算托管的工作负载——你的网站、构建、导入——并连同它一起记录偷取。空服务器上的合成压测,量的不是你真实流量的东西;在现网站上做压测还可能伤害真实访客。用你的真实任务,不要用最大负载基准。
- 一天的不同时段。早上和晚高峰重复同样的检查,试用期允许的话还要跨不止一天。几天里几乎不动的数字属于配置充足的主机;在非高峰和高峰之间剧烈波动的数字属于超售的主机。
- 保存日志。每次运行都保存时间戳、命令、当时跑的工作负载和观察到的延迟。写着“昨晚感觉慢”的工单只会得到通用回复;写明具体分钟、偷取数字和对应的变慢响应的工单,才能换来换节点或者一句实话。
怪 CPU 之前,先排除邻居
CPU 繁忙、没有空闲时间,同时偷取高,指向 CPU 调度。另外两种模式指向别处,追错方向会浪费试用期。
偷取高,同时 iowait 高。如果磁盘等待随偷取一起上升,瓶颈可能是存储,不是 CPU 调度。先用英文原文中的 NVMe 验证指南单独查存储标签,再下 CPU 有问题的结论。
偷取高,同时内存紧张、有交换活动。如果服务器内存不足,工作负载会因为内存原因停滞,看起来像变慢。先用英文原文中的第一台 VPS 选择指南把整台服务器配够——给一台缺内存的服务器加 CPU 修不好它。
当偷取上升、你的应用延迟在同一分钟里也上升,而且磁盘等待和内存压力都解释不了时,你就有了做决定需要的相关性。
拿到结果怎么办
偷取一直很低、延迟一直稳定。留着这套餐。搬入真实流量后再复查,因为邻居会变,但现在没什么要修的。
只在高峰时段偷取高。按这个顺序问客服:能不能把我换到另一台主机节点?有没有独享虚拟 CPU 或者低超售的套餐适合这个工作负载?任何一个问题的明确答案都是解决办法;含糊的答案本身也是信息。
偷取一直很高、客服帮不上忙。用你结账前记下的退款或取消条款——先读英文原文中的促销条款清单,这样打折的首期才不会把你困在糟糕节点上的续费里。把套餐页措辞、客服回复和你记录的命令输出放在一起;如果争议继续下去,它们就是证据。
不要盲目升级。同一台超售主机上的更大共享套餐,可能以更高的价格呈现同样的偷取模式。如果证据指向主机而不是你的工作负载,换节点或换服务商,胜过在同一节点上买更大的套餐。
来源与核查范围
上面的命令用的是标准 Linux 工具(top、vmstat、mpstat),它们读的是内核 CPU 计数器;读数区间是决策指南,不是服务商规格,因为共享套餐不公布偷取保证。方法说明 2026-10-28 核查。本文不含联盟链接。
发表回复