top 命令简介
top 是 Linux/Unix 系统中一个经典的、动态的进程管理工具,它会以全屏交互式的界面,实时显示系统中各个进程的资源占用情况,默认情况下,它会按照 CPU 使用率对进程进行降序排序。

top 的输出主要分为两个部分:
- 系统概要区 (顶部):显示系统的整体运行状态,如运行时间、登录用户数、系统负载、任务总数、CPU 和内存使用情况。
- 进程列表区 (底部):列出当前系统中正在运行的各个进程的详细信息。
virt 标记是什么?
virt 是 top 命令输出中 S 列(状态) 下的一个特殊状态值。
virt 的全称是 "Virtual",它表示这个进程是一个虚拟化环境中的客户机操作系统的内核进程。
当你看到一个进程的 S 列显示为 virt,这意味着:

这个进程不是一个直接在物理硬件上运行的进程,而是在一个虚拟机(或容器等虚拟化环境)内部运行的进程。
这个进程的运行最终会被宿主机的虚拟机监控程序(如 KVM, VMware, Xen, Hyper-V)捕获,并模拟成对虚拟机内部的操作。top 命令通过分析 /proc 文件系统,能够识别出这些来自客户机的进程。
如何在 top 中看到 virt 状态?
virt 状态通常只在运行了虚拟机的宿主机上才会出现。
操作步骤:
- 启动一台虚拟机:在宿主机上,使用 KVM、VMware、VirtualBox 等工具启动一台客户机操作系统(比如一台 Ubuntu 虚拟机)。
- 在宿主机上运行
top命令:top
- 观察输出:在进程列表中,你会看到一些进程的
S列(State)显示为virt,这些进程就是来自你刚刚启动的虚拟机内部的进程。
示例输出:
top - 10:30:15 up 10 days, 3:45, 2 users, load average: 0.05, 0.03, 0.00
Tasks: 152 total, 1 running, 151 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15919.2 total, 3248.8 free, 4732.3 used, 7938.1 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 10705.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 123456 78912 12345 S 5.3 0.5 10:30.15 nginx <-- 宿主机进程
5678 qemu 20 0 2048000 512000 102400 S 0.1 2.5 5:15.30 qemu-system-x86_64 <-- 虚拟机监控进程
9876 root 20 0 87654 54321 10987 virt 2.1 0.3 1:45.22 systemd <-- 虚拟机内部进程
11223 nobody 20 0 12345 6789 1234 virt 0.5 0.0 0:10.05 httpd <-- 虚拟机内部进程
...
在上面的示例中:
nginx和qemu-system-x86_64是在宿主机上直接运行的进程。systemd和httpd的S列显示为virt,表明它们是在虚拟机内部运行的进程。qemu进程就是管理这台虚拟机的虚拟机监控程序。
virt 状态的深层含义与重要性
理解 virt 状态至关重要,因为它直接关系到资源管理和性能监控。
1 资源隔离与归属
- CPU:虚拟机内部的进程(
virt状态)在宿主机上被top看到时,其 CPU 占用是虚拟的,它消耗的实际上是宿主机分配给该虚拟机的 CPU 时间片。top的%CPU列显示的是它在宿主机层面上的真实资源消耗。 - 内存:情况比较复杂。
- 物理内存:虚拟机使用的内存(如示例中的
RES列)是宿主机物理内存的一部分,宿主机的操作系统(通过 KVM 模块等)会为虚拟机分配一块内存区域。 - 虚拟内存:
VIRT列(虚拟内存大小)通常是巨大的,因为它包含了客户机操作系统认为自己拥有的整个虚拟地址空间,这包括分配给它的物理内存、客户机内核代码、以及客户机进程可能使用的交换空间(如果客户机内部配置了 swap)。
- 物理内存:虚拟机使用的内存(如示例中的
- I/O:虚拟机内部的磁盘读写、网络请求,最终都会通过虚拟机监控程序转化为对宿主机物理设备(硬盘、网卡)的操作。
2 性能监控的挑战
直接在宿主机上用 top 查看 virt 进程,可能会带来一些混淆:
- 资源归属不清:你看到一台虚拟机内部的
httpd进程占用了 2% 的 CPU,但这 2% 的 CPU 是从你为该虚拟机分配的 4 个 vCPU 中消耗的,还是从宿主机的 40 个物理核心中消耗的?你需要结合虚拟机监控程序(如virsh命令)或更专业的工具(如virt-top)来精确统计单个虚拟机的资源消耗。 - 性能损耗:虚拟化会引入一定的性能开销(称为 "hypervisor tax"),客户机指令需要经过虚拟机监控程序的翻译和模拟,这比直接在物理硬件上运行要慢。
实用技巧与相关工具
1 在 top 中按 V 切换视图
在 top 的交互界面中,按下大写的 V 键,可以切换到 "Guest" 视图,这个视图会隐藏所有来自虚拟机内部的进程(即 virt 状态的进程),只显示宿主机本身的进程,这对于快速排查宿主机自身的问题非常有用。
再次按 V 可以切回原来的视图。
2 专注于单个虚拟机
如果你只想监控某一个特定的虚拟机,top 就不太方便了,更好的工具是:
-
virt-top:这是top命令的虚拟化增强版,专门用于监控虚拟机,它能清晰地列出每台虚拟机的资源使用情况,比top更直观。# 安装 (Debian/Ubuntu) sudo apt-get install virt-top # 运行 virt-top
-
virsh:这是管理 KVM 虚拟机的命令行工具,你可以用它来查看特定虚拟机的详细资源统计。# 查看所有虚拟机及其运行状态 sudo virsh list --all # 查看名为 "my-vm" 的虚拟机的资源摘要 sudo virsh dominfo my-vm # 实时查看名为 "my-vm" 的虚拟机的资源使用情况 sudo virsh dommemstat my-vm sudo virsh vcpuinfo my-vm
| 特性 | 描述 |
|---|---|
virt 状态 |
top 命令中,S 列为 virt 的进程表示它是一个虚拟机内部运行的进程。 |
| 宿主机视角 | 在宿主机上运行 top,可以看到所有客户机进程,但它们的资源消耗是经过虚拟化层映射的。 |
| 重要性 | 帮助管理员区分宿主机进程和客户机进程,理解虚拟化环境下的资源分配方式。 |
| 监控建议 | - 使用 top 的 V 键过滤掉客户机进程,专注宿主机。- 使用 virt-top 或 virsh 对单个虚拟机进行精确的资源监控和管理。 |
掌握 virt 状态的含义,是成为一名合格的虚拟化系统管理员或运维工程师的重要一步。
