如何避免VMware平台ESXi主机CPU使用率的“坑”?
vincent twt企业IT社区 2018-12-17
前言
在实际运维中经常会遇到这样的情况,VMWARE虚拟化平台ESXi主机物理CPU及内存使用率较低,但是还是有用户感觉慢。虚拟化平台通过client看到的ESXi主机CPU的使用率的参考价值有多大?或者说哪些具体的值才有参考意义?本文将带着你绕过那些ESXi主机CPU利用的“坑”,让你真正了解虚拟化平台的CPU是否存在瓶颈,平台性能是否良好。请记住,有时候眼见不一定为实。
说到CPU的利用率不得不考虑一个CPU Ready这个参数,这个参数估计误导过很多虚拟化管理员,言归正传,开始正文。CPU Ready”这个参数有点歧义,大家很容易理解为“CPU Ready”是指有多少空闲的CPU可以使用,“CPU Ready”越多越好。然而,事实完全相反,越多的“CPU Ready”,你的虚拟化平台性能越差。
CPU Ready的值指的是虚拟机就绪但无法获得物理 CPU 调度的时间百分比。CPU Ready的值越大,说明越多的虚拟机(或应用)要去运行但是没有可用的CPU资源去运行,这些虚拟机(或应用)只能等待CPU资源。
1.造成CPU Ready高的原因有哪些?
造成CPU使用率高的原因相对容易好找点,但是造成CPU Ready的原因确让人难以琢磨。
事实上,造成CPU Ready高的原因主要有两个,一个是CPU超额分配严重,另外一个是设置了CPU限制。
CPU超额分配
造成CPUReady最主要的原因是在物理CPU上面运行的过多活跃的虚拟CPU(vCPU),一般情况向下,分配比pCPU更多的vCPU是非常正常和安全的,但是如果这个比率过高,ESXi调度程序在不影响性能的情况下执行其任务的难度就越大。vCPU/pCPU这个比率为多少的时候,CPU性能会达到最好,目前没有一个放之四海而皆准的规则,但是有一些指导参数可以参考:
CPU限制
除非在某些特定的场景使用CPU限制,一般情况下不要设置CPU限制。如果在虚拟机资源设置中设置了 CPU 限制,则当虚拟机用尽其分配的 CPU 资源时,系统会有意保留该虚拟机,而防止其调度给 PCPU。无论 CPU 利用率如何,都会发生此问题。在esxtop命令的输出中,有一个参数为%MLMTD,这表示虚拟机准备执行但由于 VMkernel 有意约束而尚未调度 CPU 时间的时间量。因为如果运行的话,会违反资源池、虚拟机或环境的限制设置。这句话是不是有点绕,其实就是说如果设置了CPU限制,那么即使物理CPU处于空闲状态,也不会把资源分配给做了限制的虚拟机。默认进行虚拟机资源限制的级别比较高,所以即使有资源空闲,也不会违反限制规则。正常情况下%MLMTD的值应该为0.000%。大多数情况下,不必指定限制。如果指定限制,则可能浪费空闲资源。下图就是在虚拟机上设置资源限制的方式。
CPU亲和力
CPU亲和力的目的是删除一些VMkernel上的调度灵活性,可以避免该线程在不同物理cpu之间切换带来的缓存失效,提高缓存命中率,也就提高了虚拟机的性能。但是在虚拟机上设置CPU亲和力永远不会提高该虚拟机的CPU性能。CPU亲和力的另一个问题是禁用vMotion, CPU亲和力是在ESXi服务器中指定特定的内核用于虚拟机。因为这些物理内核不能在CPU亲和力主机之间移动,也不能移动必须运行在这些内核上的虚拟机。这在分布式资源调度(DRS)群集中具有很大的影响。
FaultTolerance
FT通过创建和维护与此类虚拟机相同且可在发生故障切换时随时替换此类虚拟机的其他虚拟机,来确保此类虚拟机的连续可用性。受保护的虚拟机称为主虚拟机。重复虚拟机,即辅助虚拟机,在其他主机上创建和运行。主虚拟机会持续复制到辅助虚拟机,以便辅助虚拟机可以随时接管工作,从而提供 Fault Tolerant 保护。主虚拟机和辅助虚拟机会持续监控彼此的状态以确保维护Fault Tolerance。如果运行主虚拟机的主机发生故障,系统将会执行透明故障切换,此时会立即启用辅助虚拟机以替换主虚拟机,启动新的辅助虚拟机,并自动重新建Fault Tolerance 冗余。如果运行辅助虚拟机的主机发生故障,则该主机也会立即被替换。在任一情况下,用户都不会遭遇服务中断和数据丢失的情况。
如果FT两个虚拟机之间的网络有问题,不能时时同步两个虚拟机之间的信息,这时CPU性能将会下降,以保持两个虚拟机之间的同步。最好的做法是在两个虚拟机之间使用专用的,高带宽的网络。他们之间的网络类似于oracle rac之间的心跳,心跳网络尤其重要,心跳网络有问题,直接影响性能。
2.常见的 CPU Ready 误解
有几个常见的对CPUReady 误解,其中一个是超线程对性能的影响。ESXi调度程序将启用超线程的CPU视为一个完整的核心,然而超线程核心不能提供100%的性能。一般情况下启用超线程的CPU只能提供真实物理CPU 75%的性能。在启用超线程的CPU上计算超额比需要保守点,不能按照100%去计算。在进行虚拟化平台资源规划的时候也要注意这一点。
第二个就是有很多可用的CPUMHz 或者 GHz不一定说明你的平台不存在CPU Ready的问题。
CPU活动使用量不能覆盖在一定时间内具体有多少内核被虚拟机使用或者阻止其他虚拟机使用,同样地,一个虚拟机CPU使用情况和CPU Ready的值不一定是正确的。虚拟机可能有很严重的CPU Ready,但是CPU使用率确实不高,所以为了对CPU的具体情况有更正确的了解,需要从全局关注所有CPU的使用以及CPU Ready。
还有一个问题是启用DRS能否减少CPUReady?事实上,DRS不能减少CPU Ready,原因是DRS不考虑CPU调度。DRS只监控CPU和内存的使用情况来决定是否需要进行迁移,不考虑vCPU对pCPU的争用情况。
3.怎么查看CPU Ready的值?
查看环境中有多少CPUReady很简单,在vsphereclient 选择要查看的主机,选择性能,然后再图表选项中选择就绪,就可以看出目前CPU Ready的值。
但是,从上图可以看出CPU Ready的实际值,这个值是所有虚拟机上的所有vCPU的总和,不同的主机不同的环境很难确认出具体值为多少才能判断目前环境CPU Ready是否有问题,不同的平台或许这个值差别较大,但是具体哪个平台性能最优,很难判断。所以这个在client看到的值基本无意义。
使用esxtop根据输出里面的%RDY的值能够更好地判断CPUReady。然而,还需要考虑每个虚拟机分配的vCPU个数,下一章节会详细讲这些值得具体意义。
4.CPU Ready的值为多少才正常?
我们非常容易能看到CPU的使用情况,但是根据CPU Ready很难看出平台的CPU使用情况是正常还是异常。
VMWARE以前的版本官方建议每个vCPU的CPU Ready的值低于5%,最新的版本官方的说法是只要 CPU 就绪的时间大于 10%,就应该检查主机是否过载,或者虚拟机是否真的需要分配的所有资源。
如上图所示,这里需要注意的是,client端看到的值为每各20s的数据,CPU Ready计量单位为ms,计算CPU Ready的方法是将某一时刻得到的值除以于20s,上图某一时刻看到CPU Ready的值为5876,其实这是20s之内的数据,使用 5876/20000=0.29也就是29%,这个值是参考值5%的6倍,10%的将近三倍。但此时物理机CPU使用率仅为7% 。表面上看物理CPU处于正常状态,但是此时平台的CPU已存在非常严重的问题。
再详细说一点,client客户端看到的性能图标中默认的时间间隔如下:
实时:20 秒
过去一天:5 分钟(300 秒)
过去一周:30 分钟(1800秒)
过去一个月:2 小时(7200秒)
过去一年:1 天(86400秒)
计算CPU Ready百分比
要根据 CPUReady总量值计算 CPUReady百分比,请使用以下公式:
(CPU 总量值 /(<以秒为单位的图表默认更新间隔> * 1000))100 = CPU Ready百分比
例如:
vCenter 中虚拟机的实时统计信息可能具有 1000 的平均 CPUReady总量值。使用相应的值按照公式求出 CPU Ready百分比。
(1000/(20 秒 *1000))100 = 5% CPU Ready
计算CPU 就绪总量值
要将 CPUReady百分比转换为 CPUReady总量值,请使用以下公式进行反向计算:
(CPU 就绪百分比 /100)<图表默认更新间隔> 1000 = CPU 总量值
例如:
如果虚拟机的 CPUReady百分比为 5,则其在实时性能图表上的 CPU Ready总量值按如下计算:
(5 / 100) * 20 秒 * 1000 = 1000 CPU Ready
5.解决CPU Ready的方式有哪些?
a.在每台主机上部署合理的虚拟机数量
b.确保pCPU没有被vCPU过多的超额分配。如果CPU确实被超额分配,那就要根据实际情况增加物理机。
c.不要使用CPU限制,CPU限制仅仅适用于在短期的测试或者进行问题分析的时候
d.不要使用CPU亲和力规则,CPU亲和力也仅仅适用于在短期的测试或者进行问题分析的时候
e.采用Fault Tolerance (FT)的时候一定要使用最佳配置,尤其是网络方面
f.要确认DRS做什么不做什么 DRS不能减少CPUReady
6.总结
在虚拟化平台维护的过程中,不要轻易相信任何一个参数,尤其是client看到的CPU利用率的大“坑”,否则你就可能已经入“坑”,有可能会坑的很惨。再次强调眼见不一定为实,不要轻易下结论,要结合多个参数一起判断,才能对平台的性能有深入的了解,最后祝大家好运,都不会入“坑”
如何避免VMware平台ESXi主机CPU使用率的“坑”?的更多相关文章
- zabbix3.0监控centos当主机cpu使用率超过90%的时候报警
在windows系统中监控cpu利用率非常容易,自带模板就有这样的功能,但是在linux里面没有默认的模板 只有cpu的负载,默认当cpu的负载在一定时间内5以上报警 cpu utilization中 ...
- 针对主机CPU idle性能情况需求脚本编写
[环境介绍] 系统环境:Linux + osw + python 2.7.10 [背景描述] 需求:当系统服务器出现性能告警的时候,需要定位具体的时间点来进行有针对性的去查询产生的问题.OSW提供了很 ...
- 简单获取cpu使用率,以及后台运行的问题
做了一个运维平台,有一个功能定时执行一个脚本,获取cpu使用率和内存使用情况到监控平台. 获取cpu使用率使用的是top中的信息.直接运行没有问题.通过nohup xxx.sh & 之后获取不 ...
- [转帖]VMWare官网:无法关闭 ESXi 主机上的虚拟机 (1014165)
无法关闭 ESXi 主机上的虚拟机 (1014165) https://kb.vmware.com/s/article/1014165?lang=zh_CN Last Updated: 4/17/20 ...
- Linux平台Cpu使用率的计算
proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的 ...
- vmware 虚拟 CPU 性能计数器事件与主机 CPU 不兼容。
错误提示:虚拟 CPU 性能计数器事件与主机 CPU 不兼容. 点放弃 如果是暂时状态选关机, 丢失掉运行状态,即可保留硬盘内容重新开机
- 交换机CPU使用率高的原因
交换机CPU的功能 1.管理已配置的软件协议,例如: – 生成树协议(STP) – 路由协议,例如OSPF和EIGRP – 热备路由协议(HSRP) – 思科发现协议(CDP) – 端口聚合协议(PA ...
- 使用vCenter对ESXi主机进行补丁升级
使用vCenter 对ESXi 主机进行补丁升级 背景说明:公司内部有许多ESXi主机需要进行补丁升级,记录一下通过vCenter对ESXi主机进行补丁升级的过程,也可以使用esxcli命令行方式: ...
- shell 获取cpu使用率
1.shell脚本获取主机每颗CPU使用率的方法. #!/bin/bash interval= cpu_num=`-] -c` start_idle=() start_total=() cpu_rat ...
- 服务器CPU使用率高的原因分析与解决办法
我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...
随机推荐
- Opencv 中 Mat中元素的值读取方法总结
1.利用 at 函数读取 (1)单通道图像读取方式 Mat img1 = imread(filename,IMREAD_GRAYSCALE); for( size_t nrow = 0; nrow & ...
- vue基础3
1.watch 案例:百度搜索框 注释的是用watch实现的 然后这个我用的是oninput事件 a.深浅监听 浅监听 深监听(不建议使用) 2.过滤器 全局: Vue.fliter('过滤器名字', ...
- 基于AI底座的数智油气田参考架构
基于AI底座的数智油气田参考架构 Architecture for Intelligent & Digital Oilfileds Based-on AI 王权 2024.12.29 ...
- Dynamic CRM插件程序集中引入第三方dll合并打包
有时候 在插件程序集不可避免的需要使用第三方的dlll 但crm插件平台注册时 只能注册一个dll 即项目自身的dll 第三方的dll无法正常在注册后使用 查找官方资料 找到如下方法 合并打包成一个d ...
- Solution Set -「OurOJ Contest #2587」浅写
\(\mathscr A\sim\)「OurOJ #47030」_ Link & Submission & Tags:「A.DP-计数 DP」「A.数学-Stirling 数/反演 ...
- 【开源】C#上位机必备高效数据转换助手
一.前言 大家好!我是付工. 我们在进行上位机开发时,从设备端获取到的数据之后,需要进行一定的数据处理及转换,才能生成我们需要用的数据. 这其中就涉及到了各种数据类型之间的相关转换,很多非科班出身的电 ...
- SpringMVC实现原理及详解
1.什么是 SpringMVC ? 在介绍什么是 SpringMVC 之前,我们先看看 Spring 的基本架构.如下图: 我们可以看到,在 Spring 的基本架构中,红色圈起来的 Spring W ...
- ctfshow--web11session置空绕过
代码审计 点击查看代码 <?php function replaceSpecialChar($strParam){ $regex = "/(select|from|where|join ...
- .NET9 AOT部署
概念 AOT是Ahead-of-Time的缩写,AOT是将C#程序提前编译为机器代码(通常为平台特定的二进制文件),在应用程序启动之前完成编译过程. 微软官方文档是这样说的 将应用程序发布为本机 AO ...
- LOJ题目选做
你妈,机房断电写了一大堆没了 题目大概是 https://vjudge.net/contest/633974 里我做的题 和joisc2014的题