ESXi虚拟机卡顿,先别急着加内存,按CPU就绪、存储延迟、网络丢包三个方向排查,多数问题出在资源争抢或驱动不匹配上,十分钟内能定位。
esxi虚拟机卡顿怎么办?先看这三个资源争抢点
虚拟机卡顿和物理机死机不太一样,物理机是硬件坏了,虚拟机动不动就卡,往往是一台“哑巴邻居”在抢资源,打开vCenter的“性能”面板,你会发现CPU、内存、磁盘三个维度都有曲线,但曲线平不代表不卡,真正的瓶颈藏在“就绪时间”和“内存压缩”这两个冷门数值里。
用esxtop揪出CPU就绪时间
SSH登录ESXi宿主机,输入esxtop,按c切换到CPU界面,再按f调出字段列表,勾选READY%(CPU就绪时间百分比),这个数值代表虚拟机等待物理CPU的时间。正常情况下单CPU就绪时间应低于5%,如果某台虚拟机长期保持在20%以上,基本可以断定它在排队等CPU。
遇到这种情况,优先检查同宿主机的其他虚拟机是否有人跑满核数,业内专家指出,占用率低的虚拟机反而可能因“抢占CPU”导致高就绪时间,比如一台虚拟机配置了8个vCPU,但实际只用一个核跑任务,剩下7个vCPU会周期性争抢物理核心,造成整机卡顿,调整思路很简单:给每台虚拟机分配恰好够用的vCPU数量,而不是越多越好。
内存气球膨胀与Swap占用
内存卡顿更隐蔽,在esxtop里按m查看内存界面,关注MEMCTL(气球膨胀)和SWAP两列,当宿主机内存不足时,VMkernel会通过“气球驱动”回收客户机内存,被回收的虚拟机即使内部显示空闲内存很多,也会因为不断“被挤牙膏”而变慢。
如果看到SWAP数值持续跳动,说明内存已经严重超卖,此时需要检查虚拟机的“内存预留”设置,对关键业务虚拟机设置足够的预留值,防止被VMkernel过度回收,行业共识认为,生产环境内存超配比例控制在1.5倍以内,超过这个比例,卡顿概率会直线上升。
esxi虚拟机响应慢原因排查:存储与网络
排除CPU和内存后,下一个重点就是存储延迟,很多虚拟机的CPU和内存曲线都很漂亮,但打开应用依然转圈,问题大概率出在磁盘等待上。
用esxtop定位存储延迟
在esxtop界面按d进入磁盘模式,重点看DAVG/GAVG两列,单位是毫秒。DAVG是设备延迟,GAVG是虚拟机命令总延迟,如果GAVG高于30ms,说明存储链路已经出现拥堵,再按e展开VMI标记,能看到每台虚拟机的具体存储延迟来源。
常见原因有三个:第一,共享存储上的邻居虚拟机在做大规模快照合并;第二,RAID卡缓存策略没开写缓存;第三,NFS存储链路存在丢包,前两种可以调整存储侧配置解决,第三种需要用esxcli network ip connection list查看NFS连接状态,并检查物理交换机的端口流量。
近年来固态盘价格下降,不少企业把全闪存储替换机械磁盘,但虚拟机卡顿问题依旧存在,原因往往出在“混用”:部分数据盘放在SATA SSD上,部分日志盘还在SAS机械盘上,数据库频繁读写日志盘时,整体体验被拖垮,同一台虚拟机内部建议保持存储介质一致,机械盘和固态盘混用会放大延迟差异。
网络丢包和网卡类型过老
网络层面的卡顿表现为“操作卡一下,然后恢复”,比如SSH输入命令没反应,几秒后突然全部执行完,用ping -l 1400测试宿主机管理IP,如果大包延迟跳动,优先检查管理网口是否和业务网口共用物理网卡。esxcli network nic list命令可以查看当前网卡型号和固件版本。
另一个常见误配置是虚拟网卡类型使用e1000e,老版本虚拟机为了兼容性设置了Intel千兆网卡仿真,但这种网卡CPU占用高,容易触发单核瓶颈。将虚拟网卡改为vmxnet3后,多数网络延迟问题会立刻消失,修改时需要关闭虚拟机,将网卡类型从“灵活”或“e1000e”换成“VMXNET 3”。
esxi虚拟机性能优化设置:从宿主机到客户机
排查完原因,接下来是动手优化,这一步不需要重启所有虚拟机,按优先级逐项调整即可。
升级虚拟硬件版本
登录vCenter,右键虚拟机选择“兼容性”“升级虚拟硬件版本”,虚拟硬件版本对应不同ESXi版本的功能,比如从VMX-15升级到VMX-20,才能启用NVMe存储控制器和新的内存映射特性。升级后虚拟机的磁盘队列深度会增加,随机读性能明显提升,注意升级不可回退,先对测试机操作,确认无异常再批量执行。
配置CPU亲和性与NUMA
对数据库型虚拟机,可以在“CPU热添加”之外启用“CPU亲和性”,把虚拟机固定绑定到指定物理内核上,例如双路服务器有32个物理核,给虚拟机分配4个vCPU并绑定到0-3,能减少核心切换带来的延迟,但亲和性会限制DRS跨主机迁移,只在单台宿主机长期运行时使用,不建议放在vSAN集群里。
调整存储控制器的队列深度
ESXi默认的LSI Logic SAS控制器队列深度较低,遇到大规模IO容易排队,如果虚拟机的磁盘控制器是PVSCSI,可以进入虚拟机设置把“SCSI控制器”的“总线共享”改为“物理”,同时将客户机操作系统内的磁盘队列参数调高,Windows系统需要在设备管理器里确认驱动版本为最新,Linux系统可查看/sys/block/sda/device/queue_depth,通常改为256能缓解繁忙期的IO等待。
esxi虚拟机卡顿与物理机对比:什么时候必须扩容
有些卡顿靠调整解决,有些则属于硬件性能余量耗尽。物理机卡顿往往表现为系统整体响应慢,虚拟机卡顿则可能只有个别服务无响应,因为虚拟机内部资源被限定在配置参数内,当出现以下两种情况时,优化已无法根治,必须扩容。
宿主机CPU队列持续超过物理核数
如果esxtop中的PCPU列显示所有物理核心利用率接近100%,且等待队列长度常年在10以上,说明宿主机已经超载,此时无论怎么调整虚拟机参数,卡顿都会反复出现,解决方案是新增宿主机或减少虚拟机数量,而不是单个虚拟机加核,因为加核会让等待队列更长,效果适得其反。
存储延迟在低峰期也降不下来
如果深夜业务低峰期,共享存储的延迟依然高于50ms,说明磁盘阵列本身性能不足,可以考虑迁移到更高规格的存储设备,或者将冷数据转移到备份存储,这种情况下,单台虚拟机的“性能优化设置”已经是杯水车薪,需要从架构层面解决,价格方面,全闪存储每TB价格比机械盘高不少,但按运行三年计算,全闪方案的综合成本可能更低,具体要结合机房租用费用和数据增长量估算。
如何解决卡顿问题:现场操作顺序
为了让你少踩坑,这里给出一套通用的操作顺序,建议截图抄下来:
- 第一步:登录vCenter,查看告警列表里的“CPU就绪”和“内存压缩”事件。
- 第二步:SSH到宿主机,用
esxtop分别观察CPU、内存、磁盘三个界面的异常指标。 - 第三步:检查虚拟机的配置快照,撤销无用的旧快照,快照文件过大会拖慢整个存储。
- 第四步:把不相关的业务虚拟机迁移到另一台宿主机,观察卡顿是否缓解。
- 第五步:在虚拟机内部更新驱动和VMware Tools,重启一次客户机系统。
这套流程适合大多数中小企业的ESXi环境,通常能解决九成以上的日常卡顿,如果你用的是免费版ESXi,没有vCenter,可以直接在单个宿主机的esxtop里观察,命令用法是一样的,只是无法跨主机迁移。
esxi虚拟机卡顿怎么办?常见问答
问:ESXi虚拟机卡顿和物理机卡顿的排查思路有什么不同?
物理机卡顿优先检查散热、硬件故障和系统服务异常,而虚拟机卡顿更看重宿主机的资源分配策略,同一台物理机上,某个虚拟机突然抢占大量存储带宽,会影响旁边所有虚拟机,所以排查虚拟机卡顿必须同时观察“邻居虚拟机”的行为。
问:为什么我加了内存和CPU,虚拟机还是卡?
加配置需要重启虚拟机才能生效,如果加完之后没有重启,旧配额仍在使用,单个虚拟机加高配置后,如果启动时抢占的资源超过宿主机剩余量,会触发HA或资源调度,反而导致启动缓慢,加配置前先用esxtop确认宿主机确实有余量,否则加完只会让所有虚拟机一起卡顿。
问:免费版ESXi和vCenter版在性能调优上有区别吗?
免费版ESXi缺少DRS动态资源调度和基于性能的告警功能,很多卡顿问题需要手动用esxtop发现,vCenter版能自动迁移虚拟机到负载更低的宿主机,但底层资源调优逻辑一致,用命令查看的指标完全相同,如果你的环境超过三台宿主机,建议购买许可或使用其他管理工具,否则故障定位会消耗大量时间。