别想宰我,怎么查看云厂商是否超卖?详解 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 高,其他虚机都很低,那就是情况二。