在Linux下查看VM资源负载需区分宿主机和VM内部视角:宿主机用virsh、top、systemd-cgtop监控QEMU进程或cgroup资源;VM内部用uptime、top、free等命令查看自身感知负载;须交叉验证两侧数据定位真实瓶颈。

在 Linux 环境下查看虚拟机(VM)资源负载,关键在于区分“宿主机视角”和“虚拟机内部视角”。虚拟机本身不自带独立的负载统计机制,其资源使用完全由宿主机调度和暴露。因此,查看方式取决于你是在宿主机上监控 VM,还是登录到 VM 内部查看自身负载。
从宿主机看虚拟机的资源占用
宿主机需借助虚拟化平台工具识别并量化各 VM 的 CPU、内存、I/O 消耗:
-
libvirt + virsh(KVM/QEMU 主流方案):运行
virsh top可实时列出所有运行中 VM 的 CPU 和内存使用率;virsh domstats <vm-name>返回详细指标,如cpu.time、balloon.current(当前内存气球值)、net.<n>.rx_bytes</n>等。 -
top 或 htop 配合进程名识别:KVM 虚拟机本质是宿主机上的 QEMU 进程(
qemu-system-x86_64)。在top中按P排序后,可观察对应 VM 进程的 %CPU 和 RES 内存占用;htop支持树状视图,启用“Tree view”后能清晰看到每个 VM 下挂载的线程。 -
systemd-cgtop(cgroup 方式管理时):若 VM 由 systemd 启动或被划入独立 cgroup(如
/machine/qemu-vm1.scope),执行systemd-cgtop可按 cgroup 统计 CPU、内存、IO 使用,更精准反映隔离资源消耗。
在虚拟机内部查看自身负载
这与普通物理机无异,所见即该 VM 操作系统感知到的资源压力:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- uptime 或 cat /proc/loadavg:输出的 load average 是 VM 内核统计的就绪+不可中断进程平均数,反映 VM 视角下的 CPU 队列压力,但需结合 VM 分配的 vCPU 数判断是否过载(例如 2 vCPU 的 VM,长期 load > 2 即需关注)。
-
top / htop:显示 VM 内各进程对虚拟 CPU 和虚拟内存的占用,
%Cpu(s)行中的wa值高,可能意味着 VM 内部存在磁盘 I/O 等待——但实际瓶颈可能在宿主机存储层。 -
free -h 与 vmstat 1:确认 VM 内存是否充足、是否存在频繁换页(si/so 非零);若 VM 开启了内存气球(ballooning),
free显示的可用内存会低于实际分配量,此时应以virsh domstats中的balloon.current为准。
识别虚拟化开销与性能偏差
仅看单侧数据易误判。需交叉验证才能定位真实瓶颈:
- 若宿主机
top中某个 QEMU 进程 CPU 使用率很高,但 VM 内top显示所有进程总和远低于 100%,说明存在虚拟化开销(如频繁 trap 到 KVM、设备模拟延迟)或 CPU 资源争抢(如 vCPU 被其他 VM 抢占)。 - 若 VM 内
iostat -x 1显示 await 很高,而宿主机iostat对应物理磁盘 util 却很低,可能是存储后端配置问题(如 qcow2 镜像未启用 cache=none、未开启 discard)或网络存储延迟。 - 使用
mpstat -P ALL 1在 VM 内观察各 vCPU 利用率是否均衡,不均衡常暗示应用线程绑定不合理或 vCPU 调度受干扰。
辅助工具与长期监控
对生产环境建议采用结构化采集:
- prometheus + node_exporter + libvirt exporter:可同时抓取宿主机硬件指标、libvirt VM 统计、以及 VM 内 node_exporter 数据,实现跨层级关联分析。
- nmon(在 VM 内运行):适合做压力测试期间的瞬时多维快照,支持导出 CSV,便于事后比对 CPU、内存、磁盘、网络趋势。
- 避免依赖单一命令:例如仅看 VM 内 uptime 认为“负载不高”就忽略问题,可能掩盖宿主机资源饱和导致的 vCPU 调度延迟——此时 VM 内部看到的是“空闲”,但响应已变慢。

















