一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Linux 环境下如何监控 KVM 虚拟机的状态

时间:2026-07-08 09:42:52 编辑:袖梨 来源:一聚教程网

virsh list --all 是查看所有虚拟机状态的最基础可靠方法,需结合宿主机资源、虚拟化层行为和客户机内部表现三层分析:先用 virsh list --all、dominfo、domstate 查状态;再通过 ps 与 top 关联 PID 和 VM 名,或用 dommemstat 查内存;接着用 perf kvm stat、numastat、vmstat 挖掘虚拟化层瓶颈;最后进客户机用 mpstat、iostat、free、pgmajfault 验证真实负载。

直接用 virsh list --all 就能看到所有虚拟机当前状态,这是最基础也最可靠的起点。但真正要掌握运行质量,不能只看“running”或“shut off”,得结合宿主机资源、虚拟化层行为和客户机内部表现三层来看。

查状态:先看清哪些在跑、哪些停了

执行以下命令获取完整清单:

  • virsh list --all:列出全部虚拟机(含关机、暂停、崩溃等状态)
  • virsh dominfo <vm-name>:查看单个虚拟机详细信息,包括 UUID、vCPU 数、内存分配、启动时间、是否启用 balloon driver 等
  • virsh domstate <vm-name>:只输出状态字符串(如 running、paused、crashed),适合脚本调用

看资源:别只盯 top 里的 qemu-kvm 进程

单独看 top 显示的 qemu-kvm 进程,只能知道 CPU/内存占用高,但不知道是哪个虚拟机——必须把进程 PID 和虚拟机名关联起来:

  • ps aux | grep qemu-kvm | grep -v vhost- 查出所有 VM 对应的 PID 和名称(virsh 用 name 管理,不是 PID)
  • 写个简单脚本,每秒同步 top -bn1ps 输出,把 PID 映射到 VM 名,就能实时看到每个虚拟机的 CPU%、内存 RES、运行时长
  • 更稳的做法是用 virsh dommemstat <vm-name> 获取实际内存使用(actual/minimum/maximum),比 ps 的 RES 更准确,尤其启用了内存气球时

挖深层:识别虚拟化层瓶颈信号

很多卡顿不是客户机里程序慢,而是 KVM 调度或 I/O 模拟出了问题:

  • perf 后运行 perf kvm stat live,重点看 PAUSE_INSTRUCTION 占比——偏高说明 vCPU 被频繁抢占,需检查 vCPU 数量、绑定策略或宿主机负载
  • 运行 numastat -c qemu-kvm,确认 VM 内存是否集中在同一 NUMA 节点;跨节点访问会拖慢性能
  • vmstat 1r(就绪队列)、cs(上下文切换)、wa(I/O 等待)三列:r > 物理核数、cs > 50000、wa > 20%,都指向不同层级的瓶颈

进客户机:验证真实负载来源

宿主机一切正常,但业务仍慢?必须登录客户机查:

  • mpstat -P ALL 1 看每个 vCPU 利用率,是否存在某核打满而其他空闲——这是调度不均或应用线程绑核不当的典型迹象
  • iostat -x 1 观察 %util 和 await,判断磁盘是否真饱和,还是后端存储响应延迟高
  • 别依赖 htop 默认视图;建议用 free -h 看 available 内存,比 htop 的内存条更准;用 cat /proc/vmstat | grep pgmajfault 查缺页次数,持续上升说明内存紧张或 swap 激活

热门栏目