virsh查看虚拟机信息的核心命令是virsh list配合不同参数查看虚拟机列表,virsh dominfo查看单台虚拟机配置,virsh domifaddr查看虚拟机IP地址,virsh dommemstat和virsh domblkstat查看资源使用情况。掌握这些命令的参数组合,就能在KVM虚拟化环境中快速定位问题、完成日常巡检。
virsh list搭建虚拟机列表的基本功
virsh list是所有信息查询的起点,它的参数设计直接决定你能看到多广的虚拟机范围。
状态过滤参数
不附加任何参数时,virsh list默认只显示当前正在运行的虚拟机,实际运维中这个默认行为不太够用,因为排查故障时需要看到所有虚拟机,包括已关闭的实例。
# 查看所有虚拟机(包含运行中和已关闭) virsh list --all # 只看已关闭的虚拟机 virsh list --inactive # 查看运行中的虚拟机(默认行为) virsh list --state-running # 查看所有持久化虚拟机 virsh list --persistent
输出格式控制
--table、--name、--uuid这几个参数控制输出列的展示方式,在脚本处理时尤其有用。
# 只输出虚拟机名称,便于脚本循环处理 virsh list --all --name # 只输出UUID virsh list --all --uuid # 输出表格形式(默认格式) virsh list --all --table
值得注意的是,结合--name和管道符可以快速构建批量操作脚本,这是不少运维人员在日常工作中常用的组合方式,据Libvirt社区文档说明,virsh list支持最多同时指定两个过滤条件,但实际使用中单一条件已经能覆盖大多数场景。
常见简单示例
如果只想快速确认某台虚拟机的运行状态,直接执行virsh list --all,从STATE列就能看出running、shut off、paused等信息,这是最快的一个判断方式。
virsh查看虚拟机配置信息的常用命令及参数
从架构角度看,一台虚拟机对应一个XML描述文件,其中定义了内存、CPU、磁盘、网络等全部配置。virsh dominfo和virsh dumpxml就是读取这份配置的两把钥匙。
virsh dominfo单台虚拟机的核心配置
virsh dominfo <虚拟机名称或UUID>是查看单台虚拟机基本信息的首选命令,输出内容涵盖内存、CPU、状态、自动启动配置等关键字段。
virsh dominfo ubuntu-server
输出示例:
Id: 3 Name: ubuntu-server UUID: a2b3c4d5-xxxx-xxxx-xxxx-xxxxxxxxxxxx OS Type: hvm State: running CPU(s): 4 CPU time: 125.6s Max memory: 4194304 KiB Used memory: 4194304 KiB Persistent: yes Autostart: disable Managed save: no Security model: none Security DOI: 0
其中CPU time显示累计消耗的CPU时间,Max memory和Used memory的单位是KiB(即1024字节),并非常见的MB或GB,不少刚接触虚拟化的用户在这里容易产生误解,实际上4194304 KiB换算后就是4 GB。
virsh dumpxml深入查看XML配置
当需要查看虚拟机绑定的磁盘路径、网卡MAC地址、VNC端口等更底层的配置细节时,virsh dumpxml <虚拟机名称>会更全面。dominfo只展示摘要信息,而dumpxml输出完整定义。
# 查看完整XML配置 virsh dumpxml ubuntu-server # 通过grep快速过滤关键信息(查看磁盘路径) virsh dumpxml ubuntu-server | grep "source file" # 查看VNC端口配置 virsh dumpxml ubuntu-server | grep vnc
virsh查看虚拟机IP地址用哪个命令
这是日常运维中出现频率较高的一个疑问,获取虚拟机IP地址有两条路径,取决于虚拟化环境是否安装了QEMU Guest Agent。
# 推荐方式:通过Guest Agent获取(虚拟机需安装qemu-guest-agent) virsh domifaddr ubuntu-server --source agent # 备选方式:从租约文件读取(基于NAT网络) virsh net-dhcp-leases default
domifaddr --source agent的优势在于不依赖ARP表,即使虚拟机与外网隔离也能获取到地址,如果虚拟机没有安装Guest Agent,则--source agent会报错,此时可以尝试virsh net-dhcp-leases查看DHCP租约记录,前提是虚拟机使用NAT网络模式。
virsh查看虚拟机运行状态的资源类命令
排查性能问题时,CPU、内存、磁盘IO、网络流量这些动态数据是关键,这一类命令的输出通常都是实时采样值。
virsh命令查看CPU信息:vcpuinfo与vcpupin
virsh vcpuinfo <虚拟机名称>输出每个vCPU对应的物理CPU编号、运行时间、CPU亲和性等信息。
virsh vcpuinfo ubuntu-server
输出会按vCPU编号逐一展示,其中比较关键的字段是CPU Affinity,它显示的是当前vCPU可以运行在宿主机哪些物理核心上,多人在同一台物理机上部署虚拟机时,合理设置CPU亲和性可以有效避免资源争抢。
virsh vcpupin可以查询特定vCPU与物理CPU的绑定关系,如果性能调优效果不理想,不妨先用这个命令确认绑定配置是否生效。
内存与磁盘性能监控:dommemstat与domblkstat
virsh dommemstat <虚拟机名称>查看虚拟机内存使用情况,输出包括actual(实际分配内存)、rss(宿主机视角的驻留内存)、available和unused,可以对比看出虚拟机内部实际内存占用率。
virsh dommemstat ubuntu-server
输出示例:
actual 4194304 swap_in 0 swap_out 0 major_fault 0 minor_fault 1638 unused 1048576 available 3932160 rss 3589120
其中rss是宿主机实际分配给该虚拟机的物理内存,如果rss长期远小于actual,说明虚拟机内存配置可能有富余,这个场景在评估“虚拟机内存是否够用”时比较实用。
virsh domblkstat <虚拟机名称>类似地查看磁盘块设备统计信息,包括读写次数和字节数。
# 查看虚拟机所有磁盘设备统计 virsh domblkstat ubuntu-server # 指定设备(通过domblklist先查设备名) virsh domblkstat ubuntu-server vda
配合--human参数可以将字节数自动转换为KB、MB等单位,可读性更好:
virsh domblkstat ubuntu-server --human
domstats全局性能概览
virsh domstats能一次性输出所有虚拟机的状态汇总,适合巡检脚本调用,相比逐台执行dommemstat和domblkstat,效率要高得多。
# 查看所有虚拟机的基本状态和CPU/内存统计 virsh domstats --all # 只看某个虚拟机的所有统计项 virsh domstats ubuntu-server
较丰富,包含cpu.time、vcpu.current、balloon.current、block.count、net.count等,对性能数据有较多需求的场景,domstats的输出比单独逐个查询更全面。
实际运维中常见的查询组合方式
命令单独使用只能解决单一问题,真实故障排查时通常需要组合操作。
发现虚拟机IP与MAC地址的对应关系
先通过virsh list确认虚拟机在运行,再执行virsh domifaddr <名称>
拿到IP地址,最后用virsh dumpxml <名称> | grep "mac address"获取MAC地址,这样就能建立起完整的IP-MAC对应关系,这是排查NAT网络内部IP冲突的标准流程。
快速定位磁盘占用异常的虚拟机
依次执行virsh list --all查看名称,再循环运行virsh domblkstat <名称> --human,从输出中对比wr_bytes和rd_bytes的数值增长趋势,可以快速找出连续写入量偏大的虚拟机,实际生产环境中,不少磁盘告警问题都是通过这种方式发现的。
批量执行查询命令的小脚本
面对大量虚拟机时,用for循环配合virsh list --name可以快速产出巡检报告。
for vm in $(virsh list --name --all); do
echo "=== $vm ==="
virsh dominfo $vm | grep -E "State|CPU(s)|Max memory"
done
这类脚本能显著提高批量巡检的效率和便利性。
常见问题解答
virsh查看虚拟机IP地址的命令是什么?
优先使用virsh domifaddr <虚拟机名称> --source agent,前提是虚拟机内已安装并启用qemu-guest-agent服务,未安装Agent时,可以改用virsh net-dhcp-leases default查看NAT网络内的DHCP租约记录,两种方式都无法获取时,只能登录虚拟机内部通过ip addr查看。
virsh list和virsh dominfo的使用区别是什么?
virsh list面向所有虚拟机,输出的是名称、状态等汇总信息,适合了解整体环境情况;virsh dominfo面向单台虚拟机,输出该虚拟机的内存、CPU、UUID等详细配置,适合深入排查单一实例问题时使用,两者的定位关系类似于“目录”和“详情页”。
virsh查看磁盘空间用哪个命令?
virsh domblkstat <虚拟机名称>查看的是宿主机视角的磁盘读写统计数据,并非虚拟机内部可用空间,若要了解虚拟机内操作系统看到的磁盘剩余量,需要登录虚拟机操作系统内部用df -h查看,或通过virsh domfsinfo <虚拟机名称>获取文件系统信息,该命令的输出依赖Guest Agent的支撑。
掌握virsh list、virsh dominfo、virsh dumpxml、virsh domifaddr、virsh dommemstat和virsh domblkstat这组命令,再辅以--all、--human、--source agent这些关键参数,就能覆盖大多数KVM虚拟机信息查询场景。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/628306.html





