11 基本 VM Guest 管理 #
使用虚拟机管理器图形应用程序或者在命令行上使用 virsh
可以完成大部分管理任务,例如启动或停止 VM Guest。而要通过 VNC 连接到图形控制台,就只能从图形用户界面进行。
如果 VM 主机服务器上启动了虚拟机管理器、virsh
和 virt-viewer
这些 libvirt
工具,则可以使用它们来管理主机上的 VM Guest。不过,您也可以管理远程 VM 主机服务器上的 VM Guest。这需要在主机上为 libvirt
配置远程访问权限。有关说明,请参见第 12 章 “连接和授权”。
要使用虚拟机管理器连接到此类远程主机,需要按照第 12.2.2 节 “使用虚拟机管理器管理连接”中所述设置连接。如果您通过 virsh
或 virt-viewer
连接到远程主机,需要使用参数 -c
指定连接 URI(例如,virsh -c
qemu+tls://saturn.example.com/system
或 virsh -c
xen+ssh://
)。连接 URI 的格式取决于连接类型和超级管理程序 — 有关细节,请参见第 12.2 节 “连接到 VM 主机服务器”。
本章列出的所有示例都不包含连接 URI。
11.1 列出 VM Guest #
VM Guest 列表显示 VM 主机服务器上由 libvirt
管理的所有 VM Guest。
11.1.1 使用虚拟机管理器列出 VM Guest #
虚拟机管理器的主窗口会列出它所连接的每台 VM 主机服务器的所有 VM Guest。每个 VM Guest 项都包含计算机的名称及其状态(
、 或 ),这些信息以图标、文本和 CPU 使用率条的形式显示。11.1.2 使用 virsh
列出 VM Guest #
使用 virsh
list
命令可获取 VM Guest 的列表:
- 列出所有正在运行的 Guest
>
virsh list- 列出所有正在运行的 Guest 以及非活动的 Guest
>
virsh list --all
有关详细信息和其他选项,请参见 virsh help
list
或 man 1 virsh
。
11.2 通过控制台访问 VM Guest #
可以通过 VNC 连接(图形控制台)或串行控制台(如果受 Guest 操作系统的支持)访问 VM Guest。
11.2.1 打开图形控制台 #
打开与 VM Guest 连接的图形控制台可与该计算机交互,就如同通过 VNC 连接与物理主机交互一样。如果访问 VNC 服务器需要身份验证,系统会提示您输入用户名(如果适用)和口令。
当您单击进入 VNC 控制台时,光标将被“捕获”,不能再在控制台外部使用。要释放光标,请按 Alt–Ctrl。
某些组合键(例如 Ctrl–Alt–Del)由主机解释,不会传递给 VM Guest。要将此类组合键传递给 VM Guest,请在 VNC 窗口中打开 菜单,然后选择所需的组合键项。仅当使用虚拟机管理器和 virt-viewer
时,才能使用 菜单。借助虚拟机管理器,可以按照提示:将组合键传递给虚拟机中所述改用“粘滞键”功能。
理论上而言,所有 VNC 查看器都可连接到 VM Guest 的控制台。但如果您是使用 SASL 身份验证和/或 TLS/SSL 连接来访问 Guest 的,那么您的选择就比较有限。tightvnc
或 tigervnc
等常见 VNC 查看器既不支持 SASL 身份验证,也不支持 TLS/SSL。唯一可替代虚拟机管理器和 virt-viewer
的工具是 Remmina(请参见第 14.2 节 “Remmina:远程桌面客户端”)。
11.2.1.1 使用虚拟机管理器打开图形控制台 #
在虚拟机管理器中,右键单击某个 VM Guest 项。
从弹出菜单中选择
。
11.2.1.2 使用 virt-viewer
打开图形控制台 #
virt-viewer
是一个简单的 VNC 查看器,其中添加了用于显示 VM Guest 控制台的功能。例如,可以 “wait” 模式启动该查看器,在此情况下,它会先等待 VM Guest 启动,然后再建立连接。它还支持自动重新连接到重引导的 VM Guest。
virt-viewer
按名称、ID 或 UUID 对 VM Guest 进行寻址。使用 virsh
list --all
可获取这些数据。
要连接到正在运行或已暂停的 Guest,请使用 ID、UUID 或名称。已关闭的 VM Guest 没有 ID — 您只能按 UUID 或名称与其建立连接。
- 连接到 ID 为
8
的 Guest >
virt-viewer 8- 连接到名为
sles12
的非活动 Guest;Guest 启动后,连接窗口就会打开 >
virt-viewer --wait sles12如果使用
--wait
选项,即使 VM Guest 此刻未运行,也会保持连接。当 Guest 启动时,查看器即会启动。
有关更多信息,请参见 virt-viewer
--help
或 man 1 virt-viewer
。
使用 virt-viewer
通过 SSH 来与远程主机建立连接时,需要输入 SSH 口令两次。第一次用于向 libvirt
进行身份验证,第二次用于向 VNC 服务器进行身份验证。第二个口令需要在启动 virt-viewer 的命令行上提供。
11.2.2 打开串行控制台 #
要访问虚拟机的图形控制台,需要在访问 VM Guest 的客户端上提供一个图形环境。或者,也可通过串行控制台和 virsh
在外壳中访问使用 libvirt 管理的虚拟机。要打开与名为 “sles12” 的 VM Guest 连接的串行控制台,请运行以下命令:
>
virsh console sles12
virsh console
接受两个可选标志:--safe
确保以独占方式访问控制台,--force
在连接之前断开与所有现有会话的连接。这两个功能需受 Guest 操作系统的支持。
Guest 操作系统必须支持串行控制台访问,并且该操作系统也受到适当的支持,才能通过串行控制台连接到 VM Guest。有关详细信息,请参见 Guest 操作系统手册。
SUSE Linux Enterprise 和 openSUSE 中默认会禁用串行控制台访问。要启用它,请执行下列步骤:
- SLES 12、15 和 openSUSE
启动 YaST 引导加载程序模块并切换到
选项卡。将console=ttyS0
添加到 字段。- SLES 11
启动 YaST 引导加载程序模块,并选择要为其激活串行控制台访问的引导项。选择
,将console=ttyS0
添加到 字段。此外,请编辑/etc/inittab
并取消注释包含以下内容的行:#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
11.3 更改 VM Guest 的状态:启动、停止、暂停 #
可以使用虚拟机管理器或 virsh
来启动、停止或暂停 VM Guest。您还可以将 VM Guest 配置为在引导 VM 主机服务器时自动启动。
关闭 VM Guest 时,可将其正常关机或强制关机。后一种操作的效果等同于拔下物理主机上的电源插头,建议仅在没有其他办法时才这样做。强制关机可能导致 VM Guest 上的文件系统损坏或数据丢失。
要能够执行正常关机,必须将 VM Guest 配置为支持 ACPI。如果 Guest 是使用虚拟机管理器创建的,则可在 VM Guest 中使用 ACPI。
根据 Guest 操作系统,能够使用 ACPI 可能还不足以执行正常关机。在生产环境中使用 Guest 之前,强烈建议先对其进行关机和重引导测试。例如,openSUSE 或 SUSE Linux Enterprise Desktop 可能需要获得 Polkit 授权才能关机和重引导。确保已在所有 VM Guest 上关闭此策略。
如果在安装 Windows XP/Windows Server 2003 Guest 期间启用了 ACPI,只在 VM Guest 配置中开启 ACPI 并不足够。有关更多信息,请参见:
无论 VM Guest 的配置如何,始终都可以从 Guest 操作系统内部实现正常关机。
11.3.1 使用虚拟机管理器更改 VM Guest 的状态 #
可以通过虚拟机管理器的主窗口或 VNC 窗口更改 VM Guest 的状态。
右键单击某个 VM Guest 项。
在弹出菜单中选择
、 或其中一个 。
按照第 11.2.1.1 节 “使用虚拟机管理器打开图形控制台”中所述打开 VNC 窗口。
在工具栏或
菜单中,选择 、 或其中一个 选项。
11.3.1.1 自动启动 VM Guest #
您可以在引导 VM 主机服务器时自动启动 Guest。此功能默认未启用,需要为每个 VM Guest 单独启用。无法全局激活此功能。
在虚拟机管理器中双击 VM Guest 项以打开其控制台。
选择
› 打开 VM Guest 配置窗口。选择
,然后选中 。单击
保存新配置。
11.3.2 使用 virsh
更改 VM Guest 的状态 #
以下示例会更改名为 “sles12” 的 VM Guest 的状态。
- 开始
>
virsh start sles12- 暂停
>
virsh suspend sles12- 恢复(已暂停的 VM Guest)
>
virsh resume sles12- 重引导
>
virsh reboot sles12- 正常关机
>
virsh shutdown sles12- 强制关机
>
virsh destroy sles12- 开启自动启动
>
virsh autostart sles12- 关闭自动启动
>
virsh autostart --disable sles12
11.4 保存和恢复 VM Guest 的状态 #
保存 VM Guest 会保留其内存的确切状态。该操作类似于将计算机休眠。保存的 VM Guest 可以快速恢复到保存前的相同运行状况。
保存时,VM Guest 会暂停,其当前内存状态将保存到文件,然后该 Guest 停止。该操作不会复制 VM Guest 虚拟磁盘的任何一部分。保存虚拟机所需的时间取决于分配的内存量。成功保存后,VM Guest 的资源将释放回虚拟机主机服务器。
恢复操作将加载先前保存的 VM Guest 内存状态文件并启动该 Guest。该 Guest 不会引导,而是在以前保存它的位置继续运行。该操作类似于退出休眠状态。
libvirt
支持多种保存文件格式。默认格式称为 raw
,由 VM Guest 内存页面的顺序流组成。raw
格式的顺序布局不太适合多读取器和写入器场景。
除 raw
保存文件格式外,libvirt
还支持多种压缩格式:zstd
、lzop
、gzip
、bzip2
和 xz
。与 raw
格式类似,压缩格式由 VM Guest 内存页的顺序流构成,但在写入保存文件或从中读取时,会通过指定的压缩算法进行压缩处理。这些格式可节省保存文件的存储空间,但会增加保存/恢复时间及主机 CPU 占用。
sparse
保存文件格式采用预计算的固定偏移量来读写 VM Guest 内存页。生成的保存文件逻辑大小约等于 VM Guest 的内存容量,实际磁盘占用空间则取决于 VM Guest 的实时内存使用情况。sparse
格式为 VM Guest 内存页预置固定偏移量,可完美支持多读写器并发操作,这对于大内存容量的 VM Guest 而言,能显著提升其保存与恢复操作的执行效率。
默认的保存文件格式可通过修改 /etc/libvirt/qemu.conf
中的 save_image_format
进行更改。此外,在使用 virsh
执行保存操作时也可指定格式。有关使用 virsh
进行保存和恢复的详细信息,请参见第 11.4.2 节 “使用 virsh
保存和恢复”。
由于 VM Guest 的运行状态将保存至文件,请确保存储设备具备足够的可用空间。如果采用 sparse
保存文件格式,保存文件的逻辑大小约等于 VM Guest 分配的内存容量。但实际磁盘占用空间通常更小,具体取决于 VM Guest 的内存使用情况。VM Guest 中未使用的内存空间不会写入保存文件,因此我们称它为 sparse
。
对于 raw
保存文件格式,其逻辑文件大小与磁盘实际占用空间相同,两者均取决于 VM Guest 的内存使用情况。无论采用 raw
还是 sparse
格式,均可通过在 VM Guest 上执行以下命令估算保存文件的磁盘占用空间(以 MB 为单位):
>
free -mh | awk '/^Mem:/ {print $3}'
采用压缩格式可减小磁盘占用空间,具体取决于指定的压缩算法的效率。
成功执行保存操作后,如果通过恢复操作以外的方式启动 VM Guest,将导致已保存的状态文件失效。保存文件可能包含未完全写入磁盘的文件系统数据。如果在 VM Guest 通过其他方式执行后再尝试恢复保存的状态,可能会导致文件系统损坏。
请务必使用相同的应用程序进行 VM Guest 的保存与恢复操作。例如,如果使用 virsh
保存 VM Guest,则不要使用虚拟机管理器执行恢复。在这种情况下,请务必使用 virsh
进行恢复。
如果您在保存 VM Guest 后,经过长时间(数小时)的暂停再恢复该 Guest,其时间同步服务(例如 chronyd
)可能会拒绝同步其时间。在这种情况下,请手动同步 VM Guest 的时间。例如,对于 KVM 主机,可以使用 QEMU Guest 代理,并使用 guest-set-time
来指示 Guest 设置时间。有关更多详细信息,请参见第 22 章 “QEMU Guest 代理”。
11.4.1 使用虚拟机管理器保存/恢复 #
打开 VM Guest 的 VNC 连接窗口。确保该 Guest 正在运行。
选择
› › 。
打开 VM Guest 的 VNC 连接窗口。确保该 Guest 未运行。
选择
› 。如果 VM Guest 之前是使用虚拟机管理器保存的,则系统不会为您提供用于警告:始终恢复保存的 Guest中所述的有关使用
该 Guest 的选项。但请注意virsh
保存的计算机的注意事项。
11.4.2 使用 virsh
保存和恢复 #
与虚拟机管理器相比,libvirt
为保存与恢复操作提供了更精细的控制能力。virsh save
和 virsh
restore
支持多个选项,可用于调整操作行为。基本的方式是通过指定 VM Guest 的名称、ID 或 UUID 以及文件名来保存 VM Guest。例如:
>
virsh save openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
执行基本的 VM Guest 恢复操作时,只需指定保存文件名即可。例如:
>
virsh restore /virtual/saves/openSUSE-Leap.vmsav
当 VM Guest 内存容量增大时,为达到理想的传输速率,保存与恢复操作可能需要使用额外选项,尤其是在保存镜像文件存储于高吞吐量存储设备时。在此类场景中,VM 主机服务器的文件系统缓存往往适得其反,应当使用 bypass-cache
选项来避免。例如:
>
virsh save --bypass-cache openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
>
virsh restore --bypass-cache /virtual/saves/openSUSE-Leap.vmsav
通过多通道读写 VM Guest 内存页,可显著提升其在高吞吐量存储设备上的保存与恢复效率。如第 11.4 节 “保存和恢复 VM Guest 的状态”中所述,使用多通道必须采用 sparse
映像格式。选择通道数量时需谨慎,要确保操作不会对 VM 主机服务器上的其他工作负载产生负面影响。当 VM 主机服务器资源采用静态分区时,一般建议通道数设置为 VM Guest 专属物理 CPU 的核心数。由于保存操作启动时将停止 VM Guest 的 vCPU,因此这些 CPU 资源可安全地用于保存内存页。
以下示例使用 4 个通道(同时绕过 VM 主机服务器文件系统缓存)执行保存与恢复操作:
>
virsh save --bypass-cache --image-format sparse --parallel-channels 4 openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
>
virsh restore --bypass-cache --parallel-channels 4 /virtual/saves/openSUSE-Leap.vmsav
映像格式已编码存储于保存映像文件中,执行恢复操作时无需指定。
有关保存/恢复操作及支持选项的更多信息,请参见 virsh help save
、virsh help restore
或 man 1 virsh
。
11.5 创建和管理快照 #
VM Guest 快照是整个虚拟机的快照,包括 CPU、RAM、设备的状态,以及所有可写磁盘的内容。要使用虚拟机快照,所有挂接的硬盘均需使用 qcow2 磁盘映像格式,并且其中至少有一个硬盘需是可写的。
快照可让您将计算机恢复到特定时间点的状态。在撤消有错误的配置或者安装大量软件包时,此功能十分有用。启动一个在 VM Guest 处于关闭状态下创建的快照后,需要引导该 Guest。在该时间点之后写入磁盘的所有更改都将在启动快照时丢失。
快照仅在 KVM VM 主机服务器上受支持。
11.5.1 术语 #
有多个特定术语用于描述快照的类型:
- 内部快照
保存到原始 VM Guest 的 qcow2 文件中的快照。该文件包含保存的快照状态,以及自截取快照以来发生的更改。内部快照的主要优势是它们全都存储在一个文件中,因此方便在多个计算机之间复制或移动。
- 外部快照
创建外部快照时,会保存原始 qcow2 文件并将其设为只读,同时会创建一个新的 qcow2 文件用于存放更改。原始文件有时称为后备文件或基础文件,包含所有更改的新文件称为覆盖文件或派生文件。备份 VM Guest 时,外部快照很有用。但外部快照不受虚拟机管理器的支持,且无法直接通过
virsh
删除。有关 QEMU 中外部快照的详细信息,请参见第 36.2.4 节 “有效操作磁盘映像”。- 实时快照
当原始 VM Guest 正在运行时创建的快照。内部实时快照支持保存设备以及内存和磁盘状态,而使用
virsh
的外部实时快照则支持保存内存状态和/或磁盘状态。- 脱机快照
基于已关闭的 VM Guest 创建的快照。由于 Guest 的所有进程已停止且未使用任何内存,因此此类快照可确保数据完整性。
11.5.2 使用虚拟机管理器创建和管理快照 #
虚拟机管理器仅支持实时或脱机的内部快照。
要在虚拟机管理器中打开快照管理视图,请按照第 11.2.1.1 节 “使用虚拟机管理器打开图形控制台”中所述打开 VNC 窗口。现在请选择 › ,或单击工具栏中的 。
所选 VM Guest 的现有快照列表显示在窗口的左侧。上次启动的快照带有绿色对勾标记。窗口的右侧显示列表中当前标记的快照的细节。这些细节包括快照的标题和时戳、截取快照时 VM Guest 的状态以及说明。运行中 Guest 的快照还包括一个屏幕截图。可以直接在此视图中更改
。其他快照数据不可更改。11.5.2.1 创建快照 #
要截取 VM Guest 的新快照,请执行以下操作:
(可选)关闭 VM Guest 以创建脱机快照。
单击 VNC 窗口左下角的
。提供“自述性名称”。
和说明(可选)。截取快照后将无法更改该名称。为方便以后识别该快照,请使用单击
确认。
11.5.2.2 删除快照 #
要删除 VM Guest 的快照,请执行以下操作:
单击 VNC 窗口左下角的
。单击
确认删除。
11.5.2.3 启动快照 #
要启动快照,请执行以下操作:
单击 VNC 窗口左下角的
。单击
确认启动。
11.5.3 使用 virsh
创建和管理快照 #
要列出某个域(以下示例中为 admin_server)的所有现有快照,请运行 snapshot-list
命令:
>
virsh snapshot-list --domain sle-ha-node1
Name Creation Time State
------------------------------------------------------------
sleha_12_sp2_b2_two_node_cluster 2016-06-06 15:04:31 +0200 shutoff
sleha_12_sp2_b3_two_node_cluster 2016-07-04 14:01:41 +0200 shutoff
sleha_12_sp2_b4_two_node_cluster 2016-07-14 10:44:51 +0200 shutoff
sleha_12_sp2_rc3_two_node_cluster 2016-10-10 09:40:12 +0200 shutoff
sleha_12_sp2_gmc_two_node_cluster 2016-10-24 17:00:14 +0200 shutoff
sleha_12_sp3_gm_two_node_cluster 2017-08-02 12:19:37 +0200 shutoff
sleha_12_sp3_rc1_two_node_cluster 2017-06-13 13:34:19 +0200 shutoff
sleha_12_sp3_rc2_two_node_cluster 2017-06-30 11:51:24 +0200 shutoff
sleha_15_b6_two_node_cluster 2018-02-07 15:08:09 +0100 shutoff
sleha_15_rc1_one-node 2018-03-09 16:32:38 +0100 shutoff
使用 snapshot-current command:
命令显示上次启动的快照:
>
virsh snapshot-current --domain admin_server
Basic installation incl. SMT for CLOUD4
运行 snapshot-info
命令可以获取有关特定快照的细节:
>
virsh snapshot-info --domain admin_server \
-name "Basic installation incl. SMT for CLOUD4"
Name: Basic installation incl. SMT for CLOUD4
Domain: admin_server
Current: yes
State: shutoff
Location: internal
Parent: Basic installation incl. SMT for CLOUD3-HA
Children: 0
Descendants: 0
Metadata: yes
11.5.3.1 创建内部快照 #
要创建 VM Guest 的内部快照(实时或脱机快照),请如下所示使用 snapshot-create-as
命令:
>
virsh snapshot-create-as --domain admin_server1 --name "Snapshot 1"2 \
--description "First snapshot"3
11.5.3.2 创建外部快照 #
使用 virsh
可以创建 Guest 内存状态和/或磁盘状态的外部快照。
要同时创建 Guest 磁盘的实时和脱机外部快照,请指定 --disk-only
选项:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" --disk-only
可以指定 --diskspec
选项来控制外部文件的创建方式:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" \
--disk-only --diskspec vda,snapshot=external,file=/path/to/snapshot_file
要创建 Guest 内存的实时外部快照,请指定 --live
和 --memspec
选项:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" --live \
--memspec snapshot=external,file=/path/to/snapshot_file
要创建 Guest 磁盘和内存状态的实时外部快照,请结合使用 --live
、--diskspec
和 --memspec
选项:
>
virsh snapshot-create-as --domain admin_server --name \
"Offline external snapshot" --live \
--memspec snapshot=external,file=/path/to/snapshot_file
--diskspec vda,snapshot=external,file=/path/to/snapshot_file
有关更多细节,请参见 man 1 virsh
中的 SNAPSHOT COMMANDS 部分。
11.5.3.3 删除快照 #
无法使用 virsh
删除外部快照。要删除 VM Guest 的内部快照并恢复其占用的磁盘空间,请使用 snapshot-delete
命令:
>
virsh snapshot-delete --domain admin_server --snapshotname "Snapshot 2"
11.5.3.4 启动快照 #
要启动快照,请使用 snapshot-revert
命令:
>
virsh snapshot-revert --domain admin_server --snapshotname "Snapshot 1"
要启动当前快照(用于启动 VM Guest 的快照),使用 --current
便已足够,不需要指定快照名称:
>
virsh snapshot-revert --domain admin_server --current
11.6 删除 VM Guest #
默认情况下,使用 virsh
删除 VM Guest 只会去除其 XML 配置。由于默认不会删除挂接的存储设备,因此您可以在另一个 VM Guest 上重复使用该存储设备。使用虚拟机管理器还可以删除 Guest 的存储文件。
11.6.1 使用虚拟机管理器删除 VM Guest #
在虚拟机管理器中,右键单击某个 VM Guest 项。
从上下文菜单中选择
。一个确认窗口即会打开。单击
会永久擦除该 VM Guest。该删除操作不可恢复。您还可以通过激活
来永久删除 Guest 的虚拟磁盘。该删除操作也不可恢复。
11.6.2 使用 virsh
删除 VM Guest #
要删除 VM Guest,需先将其关闭。无法删除运行中的 Guest。有关关机的信息,请参见第 11.3 节 “更改 VM Guest 的状态:启动、停止、暂停”。
要使用 virsh
删除 VM Guest,请运行 virsh
undefine
VM_NAME。
>
virsh undefine sles12
没有可自动删除挂接的存储文件的选项。如果这些文件由 libvirt 管理,请按照第 9.2.1.4 节 “从存储池中删除卷”中所述将其删除。
11.7 监控 #
11.7.1 使用虚拟机管理器进行监控 #
启动虚拟机管理器并连接到 VM 主机服务器后,所有运行中 Guest 的 CPU 使用率图表将会显示。
您也可以通过此工具获取有关磁盘和网络使用情况的信息,不过必须先在
中激活此功能:运行
virt-manager
。选择
› 。从
选项卡切换到 。选中要查看的活动类型对应的复选框:
、 和 。如果需要,还可以使用
来更改更新间隔。关闭
对话框。在
› 下选中应显示的图表。
此后,磁盘和网络统计数据也会显示在虚拟机管理器的主窗口中。
可以从 VNC 窗口获取更精确的数据。按照第 11.2.1 节 “打开图形控制台”中所述打开 VNC 窗口。在工具栏或 菜单中选择 。可以通过左侧树菜单中的 项显示统计数据。
11.7.2 使用 virt-top
进行监控 #
virt-top
是一个命令行工具,与众所周知的进程监控工具 top
类似。virt-top
使用 libvirt,因此能够显示不同超级管理程序上运行的 VM Guest 的统计数据。建议使用 virt-top
,而不要使用 xentop
等特定于超级管理程序的工具。
virt-top
默认会显示所有运行中 VM Guest 的统计数据。显示的数据包括已用内存百分比 (%MEM
)、已用 CPU 百分比 (%CPU
),以及 Guest 的运行时长 (TIME
)。数据会定期更新(默认为每三秒更新一次)。下面显示了某台 VM 主机服务器上的输出,该服务器包含七个 VM Guest,其中有四个处于非活动状态:
virt-top 13:40:19 - x86_64 8/8CPU 1283MHz 16067MB 7.6% 0.5% 7 domains, 3 active, 3 running, 0 sleeping, 0 paused, 4 inactive D:0 O:0 X:0 CPU: 6.1% Mem: 3072 MB (3072 MB by guests) ID S RDRQ WRRQ RXBY TXBY %CPU %MEM TIME NAME 7 R 123 1 18K 196 5.8 6.0 0:24.35 sled12_sp1 6 R 1 0 18K 0 0.2 6.0 0:42.51 sles12_sp1 5 R 0 0 18K 0 0.1 6.0 85:45.67 opensuse_leap - (Ubuntu_1410) - (debian_780) - (fedora_21) - (sles11sp3)
输出默认按 ID 排序。使用以下组合键可以更改排序字段:
Shift–P:CPU 使用率 |
Shift–M:Guest 分配的内存总量 |
Shift–T:时间 |
Shift–I:ID |
要使用任何其他字段进行排序,请按 Shift–F 并从列表中选择一个字段。要切换排序顺序,请使用 Shift–R。
virt-top
还支持基于 VM Guest 数据生成不同的视图,按以下键可以即时更改视图:
0:默认视图 |
1:显示物理 CPU |
2:显示网络接口 |
3:显示虚拟磁盘 |
virt-top
支持使用更多热键来更改数据视图,并支持许多可以影响程序行为的命令行开关。有关详细信息,请访问 man 1
virt-top
。
11.7.3 使用 kvm_stat
进行监控 #
kvm_stat
可用于跟踪 KVM 性能事件。它会监控 /sys/kernel/debug/kvm
,因此需要挂载 debugfs。SUSE Linux Enterprise Server 上默认应该已挂载 debugfs。如果未挂载,请使用以下命令:
>
sudo
mount -t debugfs none /sys/kernel/debug
可在三种不同的模式下使用 kvm_stat
:
kvm_stat # update in 1 second intervals kvm_stat -1 # 1 second snapshot kvm_stat -l > kvmstats.log # update in 1 second intervals in log format # can be imported to a spreadsheet
kvm_stat
的典型输出 #kvm statistics efer_reload 0 0 exits 11378946 218130 fpu_reload 62144 152 halt_exits 414866 100 halt_wakeup 260358 50 host_state_reload 539650 249 hypercalls 0 0 insn_emulation 6227331 173067 insn_emulation_fail 0 0 invlpg 227281 47 io_exits 113148 18 irq_exits 168474 127 irq_injections 482804 123 irq_window 51270 18 largepages 0 0 mmio_exits 6925 0 mmu_cache_miss 71820 19 mmu_flooded 35420 9 mmu_pde_zapped 64763 20 mmu_pte_updated 0 0 mmu_pte_write 213782 29 mmu_recycled 0 0 mmu_shadow_zapped 128690 17 mmu_unsync 46 -1 nmi_injections 0 0 nmi_window 0 0 pf_fixed 1553821 857 pf_guest 1018832 562 remote_tlb_flush 174007 37 request_irq 0 0 signal_exits 0 0 tlb_flush 394182 148
有关如何解释这些值的更多信息,请参见 https://clalance.blogspot.com/2009/01/kvm-performance-tools.html。