别想宰我,怎么查看云厂商是否超卖?详解 cpu steal time

据说有些云厂商会超卖,宿主有 96 个核心,结果卖出去 100 多个 vCPU,如果这些虚机负载都不高,大家相安无事,如果这些虚机同时运行一些高负载的任务,相互之间就会抢占 CPU,对应用程序有较大影响,我应该如何查看我的 CPU 是否被抢占了呢?

什么是 cpu steal time?

如果你在物理机上查看这个指标,这个指标必然是 0,只有虚拟机才需要关注这个指标。我们看一下 CPU steal time 的定义(来自 ibm.com):

Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor.

虚拟机毕竟是被虚拟出来的,虚拟机要用到 CPU,最终还是要通过宿主机的 CPU 来完成,如果宿主机的 CPU 正在为其他虚拟机服务,那么当前虚拟机就会等待,这个等待的时间就是 steal time。

CPU 跟内存不一样,内存是可以做到硬限制的,如果云厂商超卖,CPU 抢占确实有可能会影响到你的应用程序,所以,我们需要关注这个指标。具体如何查看呢?

如何查看 cpu steal time?

使用 top 命令即可:

上图中,st 就是 steal time,这个指标是百分比,如果是 10,就是 10%。我这个环境是 0%,说明非常健康。

何时需要关注 cpu steal time?

如果这个值长时间(比如连续 20 分钟)超过 10%,就需要介入处理。

如何应对 cpu steal time 过高?

有两种情况,可能都会引起这个值变高,一个是你自己的程序本身负载比较高,你需要优化程序或升配,一个是云厂商超卖,需要迁移虚机到空闲宿主机上(重启虚机,或者直接联系云厂商解决)。如何区分这两种情况呢?

比如你有个 web 程序,部署在 4 台虚机上,4 台虚机负载都高,那大概就是情况一,如果只有一台虚机 st 高,其他虚机都很低,那就是情况二。

这个问题最初来自社区某用户的疑问,大家如果想讨论 SRE、监控、可观测性相关话题,欢迎免费加入知识星球:

热门相关:天龙剑尊   如意小郎君   龙皇缠身:爱妃,来生蛋!   隐婚365天:江少,高调宠!   娘娘每天都在洗白