pidstat 不直接监控虚拟机负载,但能精准监控 qemu-system-x86_64 等宿主进程的 cpu(%guest/%usr/%system)、内存(rss/majflt)和 i/o(rkb/wkb)消耗,从而评估虚拟化实际开销与性能瓶颈。

pidstat 本身不直接监控虚拟化管理程序(如 KVM、Xen、libvirt 或 QEMU 进程)的“虚拟机负载”,但它能精准监控运行虚拟机的底层宿主进程(比如 qemu-system-x86_64)本身的资源消耗——这才是判断虚拟化开销的关键入口。
确认你要监控的目标进程
虚拟化管理程序在宿主机上表现为普通用户态进程,常见有:
-
qemu-system-x86_64(KVM/QEMU 虚拟机实例) -
libvirtd(libvirt 守护进程,负责调度和管理) -
virtqemud或virtinterfaced(较新 libvirt 架构下的分拆服务)
先用 ps aux | grep qemu 或 pgrep -af 'qemu-system' 查看正在运行的虚拟机对应 PID 和完整命令行,避免只匹配 qemu 导致误抓其他进程。
监控单个虚拟机进程的 CPU 和 %guest 消耗
关键指标是 %guest ——它表示该进程为虚拟客户机(Guest OS)执行指令所占用的 CPU 时间百分比,是衡量虚拟化实际计算开销的核心字段:
pidstat -u -p $(pgrep -f 'qemu-system-x86_64.*vm-name') 2- 输出中重点关注:
%usr(QEMU 自身逻辑开销)、%system(内核交互如 vhost、KVM ioctl)、%guest(真正跑 Guest 的时间) - 若
%guest长期接近%CPU,说明虚拟机 CPU 利用率高且 KVM 调度高效;若%guest很低但%usr或%system很高,可能是 QEMU 模拟开销大、IO 等待或配置不当(如未启用 KVM、缺少 CPU passthrough)
同时观察内存与 I/O 压力
虚拟机性能瓶颈常来自内存映射或磁盘/网络后端:
pidstat -r -d -p $(pgrep -f 'qemu-system-x86_64.*vm-name') 2-
RSS突增可能反映 Guest 内存分配激增或大页未生效;majflt/s(主缺页)持续高企,说明频繁从 backing file(如 qcow2)加载内存页,需检查存储性能或启用 cache=writeback -
rkB/s/wkB/s可定位是否磁盘 IO 成瓶颈;结合iostat -x 1对比宿主机块设备利用率,确认是 QEMU 进程拖慢还是底层存储响应慢
区分宿主进程与 Guest 内部视角
pidstat 查的是宿主机视角下 QEMU 进程的行为,不是 Guest 里的 top 数据:
- Guest 中看到的 “100% CPU” 在宿主机 pidstat 中可能只显示为
%guest: 85.2+%usr: 12.1,因为部分时间花在模拟、设备模型、中断注入等 - 不要用 pidstat 直接查
systemd或libvirtd来评估虚拟机负载——它们只做管理,真正吃资源的是每个qemu子进程 - 如需横向对比多个 VM,可用
pidstat -u -p "$(pgrep -f 'qemu-system' | tr '\n' ',' | sed 's/,$//')" 3一次性监控所有 QEMU 实例











