Linux 中怎么排查虚拟化环境下的 CPU 超分与争用

大晨同学_8019

大晨同学_8019

2026-10-13

650人浏览

原创

cpu超分引发争用时,宿主机cpu利用率低但vm卡顿,核心是“资源可分配但不可及时调度”;需通过load average、vmstat的r/cs值、%st steal time等指标确认争用,并用virsh、ps、lscpu等定位源头及硬件瓶颈,再以降vcpu、cpu pinning、cgroups限频等方式精准缓解。

linux 中怎么排查虚拟化环境下的 cpu 超分与争用

虚拟化环境下 CPU 超分(CPU overcommit)本身是常见设计,但一旦引发争用(contention),就会表现为宿主机 CPU 利用率不高、而客户机(VM)却严重卡顿或响应延迟——这是典型的“资源可分配但不可及时调度”问题。排查重点不在“谁吃了 CPU”,而在“谁在等 CPU”以及“调度是否公平”。

CPU 超分是否已实际引发争用?先看宿主机关键指标

登录宿主机后,不急着查 VM 进程,先确认争用是否存在:

  • 看 load average 是否持续高于物理 vCPU 总数:比如 4 核宿主机,load > 4 持续 5 分钟以上,说明就绪队列积压,存在调度压力;但注意,若 load 高而 %us/%sy 很低、%id 接近 100%,则更可能是 I/O 等待导致的假性高负载,非 CPU 争用。
  • 用 vmstat -w 1 观察 r(运行队列长度)和 cs(上下文切换):r 值长期 > 宿主机逻辑 CPU 数,且 cs 每秒超 2~3 万次,大概率是多 VM 抢占调度器时间片,内核频繁切换上下文。
  • 检查 steal time(%st):在 top 或 vmstat 输出中找 %st 列(steal time)。该值代表 VM 等待宿主机 CPU 时间被其他 VM 占用的比例。若 %st > 5%,尤其在业务高峰期稳定维持,就是 CPU 超分争用的直接证据;> 20% 表明严重资源饥饿。

定位争用源头:哪些 VM 或 vCPU 在“抢”调度时间

宿主机上执行以下命令,聚焦虚拟化层视角:

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载
  • 查所有 QEMU/KVM 进程的 steal 时间:ps -eo pid,comm,%cpu,%mem,pcpu,stime,etime,args --sort=-pcpu | grep qemu,结合 /proc/[pid]/stat 中第 38 字段(guest_steal_time)与第 39 字段(guest_stolen_time)可算出单个 VM 的 steal 占比。
  • 用 virsh 查 VM 实时 vCPU 统计:virsh vcpuinfo <vm-name></vm-name> 显示每个 vCPU 当前状态(running / idle / blocked)及运行时长;再配合 virsh domstats <vm-name> | grep cpu.</vm-name>,重点关注 cpu.time(总调度时间)、cpu.wait(等待调度时间)、cpu.stolen(被 steal 时间)。
  • 识别“vCPU 密集型”VM:有些 VM 配置了远超其实际负载所需的 vCPU 数(如 16vCPU 但只跑单线程服务),会持续占用调度槽位。用 virsh list --all + virsh dumpxml <vm-name> | grep vcpu</vm-name> 汇总各 VM 的 vCPU 分配量,对比其实际 %cpu 使用率(top -H -p $(pgrep -f "qemu.*<vm-name>")</vm-name>),若分配多、使用低,就是争用隐患点。

区分是调度争用,还是底层硬件瓶颈

避免误判的关键:确认问题出在虚拟化调度层,而非物理 CPU 或 NUMA 不匹配:

  • 检查宿主机 CPU topology 和 NUMA 绑定:运行 lscpu 和 numactl --hardware。若 VM 分配了跨 NUMA 节点的 vCPU,而内存又未绑定到对应节点(virsh numatune <vm-name></vm-name>),会导致远程内存访问延迟激增,表现类似 CPU 争用。
  • 观察 per-CPU 使用是否严重不均:执行 mpstat -P ALL 1,看是否某些物理核心长期 95%+,而其余核心闲置。这往往说明 VM 的 vCPU 未做 CPU pinning,KVM 默认调度导致热点集中。
  • 确认是否启用了 CPU 隔离(isolcpus)或实时调度策略:若有关键 VM 启用了 <cpu mode="host-passthrough"><numa></numa></cpu> 或设置了 vcpupin,但宿主机未隔离对应 CPU,则争用会加剧。检查 cat /proc/cmdline 是否含 isolcpus=,以及 virsh vcpupin <vm-name></vm-name> 输出。

验证与缓解建议

确认争用后,优先从配置层面干预,而非临时 kill 进程:

  • 对非关键 VM,降低 vCPU 数量,改用 CPU bandwidth 控制(cgroups v2):virsh schedinfo <vm-name> --set cpu_quota=50000 --set cpu_period=100000</vm-name>(限制为 0.5 核)。
  • 对高优先级 VM,启用 CPU pinning 并绑定到专用物理核心,同时关闭其 vCPU 的热插拔和自动迁移(virsh setvcpus <vm-name> --maximum X --config</vm-name> + --vcpupin)。
  • 检查宿主机 KVM 参数:确保 /sys/module/kvm/parameters/halt_poll_ns 设置合理(默认 0,可设为 200000 减少空闲轮询开销),并确认 kvm-intel.nested=1 等参数未引入额外开销。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3990

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3413

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2573

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6250

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5882

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3433

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2925

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3159

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习