首页 > 其他分享 >别想宰我,怎么查看云厂商是否超卖?详解 cpu steal time

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

时间:2024-03-26 19:44:06浏览次数:32  
标签:虚拟机 CPU 虚机 time 超卖 steal cpu

据说有些云厂商会超卖,宿主有 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 命令即可:

20240320185346

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

何时需要关注 cpu steal time?

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

如何应对 cpu steal time 过高?

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

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

20240320190549

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

20240320191350

标签:虚拟机,CPU,虚机,time,超卖,steal,cpu
From: https://www.cnblogs.com/ulricqin/p/18097418

相关文章

  • Python——timeit(运行时间平均值计算)
    可以计算其中运行代码所用的平均时间。importtimeitprint(timeit.timeit('a,b=10,20;a1=a;a=b;'))0.015125599999009864使用多重赋值的技巧来交换两个变量,也就是所谓的“迭代解包”它的运行时间是:importtimeitprint(timeit.timeit('a,b=10,20;a,b=b,......
  • 分享一个项目:go `file_line`,在编译器得到源码行号,减少运行期runtime消耗
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯file_linehttps://github.com/ahfuzhang/file_lineLike__FILE__/__LINE__ofC:usegogeneratetogetsourcecodelinenumberatcompiletime.像C语言里面......
  • 【IT老齐058】Zookeeper解决分布式系统商品库存超卖问题
    【IT老齐058】Zookeeper解决分布式系统商品库存超卖问题场景解决方案传统的synchronized是无效的,它只针对一个JVM进程内多个线程起到同步作用,对跨进程无效。利用数据库select...forupdate语句对库存进行锁定,依赖数据库自身特性,遇到跨库(分库分表)处理起来比较麻烦。利用......
  • 【IT老齐063】秒杀场景下解决商品库存超卖问题
    【IT老齐063】秒杀场景下解决商品库存超卖问题超卖问题核心问题秒杀商品库存总量固定先到先得,瞬间并发极大,但写库量有限解决方案利用预减库存方式杜绝超卖利用Nginx+Lua在网关层面将无效请求阻挡利用MQ消息队列的限流特性保证MySQL不会被瞬间击垮APP需要额外设计......
  • go--time 模块
    time模块获取当前的时间和月份packagemainimport("fmt""time")funcmain(){t:=time.Now()//获取当前时间fmt.Println(t)fmt.Println(t.Date())//获取日期fmt.Println(t.Year())//获取年份fmt.Println(t.M......
  • 在Flink 1.11中,assignTimestampsAndWatermarks方法已经被新的方法assignTimestamps和a
    在Flink1.11中,assignTimestampsAndWatermarks方法已经被新的方法assignTimestamps和assignWatermarks所替代。这是为了更好地将时间戳和水位线的定义分离开来以下是使用新API的示例代码:importorg.apache.flink.api.common.eventtime.WatermarkStrategy;importorg.apache.fli......
  • timer_list
    参考资料:《正点原子Linux驱动教程》 定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。Linux内核定时器采用系统时钟来实现,也就是archtimer。Linux内核使用timer_list结构体表示内核定时器,timer_list定义在文件include/linux/timer.h中,定义如下:struct......
  • Flink: Function And Rich Function , 对比 Function ,Rich functions还提供了这些方法:o
    Flink:FunctionAndRichFunction,对比Function,Richfunctions还提供了这些方法:open、close、getRuntimeContext和setRuntimeContext序言    了解了Flink提供的算子,那我们就可以自定义算子了.自定义算子的目的是为了更加灵活的处理我们的业务数据,并将满足条件......
  • 题解:AT_abc345_c [ABC345C] One Time Swap
    求过审题面翻译给定一个字符串$s$,求执行以下操作一次可以产生的字符串的个数设$N$为$s$的长度。选择一对整数$(i,j)$,使$1≤i<j≤N$,交换$s$的第$i$个和第$j$个字符可以证明,在这个问题的约束条件下,你总是可以得到它思路暴力做法我们可以......
  • Go-Rod #3 Context and Timeout
    这个示例演示了如何设置超时操作。packagemainimport( "math/rand" "time" "github.com/go-rod/rod")funcmain(){ page:=rod.New().MustConnect().MustPage("https://github.com") page. //Seta5-secondtimeoutforallcha......