直接登录宿主机执行系统命令、查看虚拟机配置文件或通过虚拟化平台管理界面,就能完整获取虚拟机的CPU、内存、磁盘、网络等配置参数,不同虚拟化环境具体查看路径略有差异。
我平时排查虚拟机性能问题,第一步永远是先搞清楚这台虚拟机到底分到了多少资源,很多朋友一上来就重装系统或者盲目扩容,结果发现瓶颈根本不在配置上,这篇文章直接把查看虚拟机信息的几种可靠路径拆开讲清楚,你可以根据自己用的是哪种虚拟化平台,对号入座去操作。
查看虚拟机配置参数最常用的三种方式
日常运维中,查看虚拟机信息不外乎三种途径:宿主机命令行、配置文件、图形化管理界面,每一种都有其适用场景,不能说哪个绝对好用,只能说哪个在当前条件下最顺手。
登录宿主机用命令行直接查看
如果你维护的是KVM或者基于QEMU的虚拟化环境,登录宿主机用virsh命令是效率最高的方式,这套命令几乎成了Linux虚拟化运维的通用语言,不需要额外安装图形界面,一条命令就能拿到核心参数。
- 列出所有运行中的虚拟机:
virsh list,加上--all参数可以连已关机的虚拟机一起显示。 - 查看指定虚拟机的详细配置:
virsh dominfo 虚拟机名称,返回结果会直接显示CPU数量、内存大小、运行状态、是否自动启动等信息。 - 想看更底层的硬件映射关系,比如每个vCPU绑定了哪个物理核心,用
virsh vcpuinfo 虚拟机名称。 - 查看磁盘和网卡的实际分配情况:
virsh domblklist 虚拟机名称和virsh domiflist 虚拟机名称。
相比之下,如果你用的是VMware ESXi,命令风格会有点区别,通过SSH登录到ESXi宿主机的Shell环境后,可以用esxcli vm process list查看运行中虚拟机的基本资源占用,用vim-cmd vmsvc/get.summary 虚拟机ID查看该虚拟机的名称、内存配置和电源状态,用vim-cmd vmsvc/get.config 虚拟机ID则能拿到更完整的硬件清单,包括虚拟网卡类型、磁盘控制器类型等细节。
通过配置文件直接读取硬件分配
对于KVM虚拟机,配置文件本质上就是一个XML文件,里面有完整的硬件拓扑描述,默认存放路径一般是/etc/libvirt/qemu/目录下,文件以虚拟机名称命名,后缀为.xml。
打开这个文件,你就能看到<memory>标签定义的内存大小,<vcpu>标签定义的CPU核数,<disk>标签定义磁盘的源文件路径、总线类型和设备类型,<interface>标签定义网卡的桥接模式或NAT模式以及MAC地址,这种方式适合在虚拟机无法正常启动时做故障排查,因为即便系统起不来,配置文件依然保留了最后一次的硬件分配状态。
ESXi环境下没有可以直接编辑的单一XML文件,虚拟机配置存储在vSphere的数据存储目录中,文件名为
虚拟机名称.vmx,不过ESXi不建议直接手动编辑这个文件,改动前需要先注销虚拟机注册状态,操作失误可能导致虚拟机无法识别,日常查看配置还是建议用命令行或管理界面。
使用vCenter或Web管理界面查看
对于规模较大的虚拟化集群,通过图形界面查看会更直观,vCenter的Web Client界面里,点开任意虚拟机,在“配置”或“编辑设置”页面就能看到完整的资源分配情况,包括CPU数量、内存容量、磁盘空间、网络连接数以及虚拟机版本类型,还能直接看到资源消耗的实时图表。
KVM环境对应的图形化管理工具是virt-manager,安装后通过远程连接宿主机,双击虚拟机图标即可查看硬件配置,界面左侧是硬件分类列表,点“Overview”可以查看内存和CPU分配,点“Virtual Network”可以查看网卡连接方式,点“IDE Disk”或“SCSI Disk”能确认磁盘的存储格式和总线类型。
具体场景下怎么查看虚拟机配置参数更准确
上面讲的是一些通用命令,但真实使用过程中总会遇到一些边界场景,比如虚拟机已经关机了怎么看,Windows虚拟机怎么看,以及容器和虚拟机混用时怎么区分,这些场景下,你需要掌握一些额外技巧。
虚拟机处于关机状态时仍然可以查看配置
多数情况下,virsh dominfo在虚拟机处于关机状态时同样生效,因为读取的信息来自配置文件而非运行状态,不过有两点需要注意:一是virsh domiflist在关机状态下可能返回空列表,因为虚拟网卡没有热插拔的设备实例;二是如果虚拟机被设置了managed save(托管保存)状态,某些信息显示的是临时快照的配置,需要先取消这个状态再查看。
ESXi环境下,查看已关机虚拟机的配置用vim-cmd vmsvc/get.config就不会有问题,这组命令读取的也是VMX配置文件,与虚拟机电源状态无关。
Windows虚拟机内部查看配置的路径
有些朋友会问,能不能直接在虚拟机里面看配置,这个问题得分两层理解:虚拟机内部查看的是操作系统分配到的资源,也就是虚拟硬件给到系统的那部分,比如Windows系统打开任务管理器看到的内存数量和CPU逻辑处理器数量,本质上就是虚拟机的配置参数,如果看更详细的硬件型号信息,运行msinfo32(系统信息)命令,在“系统摘要”和“组件”分类下就能看到BIOS版本、网卡型号、磁盘控制器等虚拟化设备信息。
需要明白的一点是,虚拟机内部的工具并不能看到宿主机层面的分配上限,比如你给一台虚拟机动态分配了4GB内存,但在Windows任务管理器里看到的内存大概率是启动时预留的值,两者存在差异。
容器和虚拟机混用环境下如何快速区分
越来越多的生产环境采用虚拟机加容器的混合架构,在这种环境下查看配置,要特别注意命令的作用域。
cat /proc/cpuinfo在容器里看到的是宿主机的CPU信息,在虚拟机里看到的是虚拟CPU的信息,如果你在容器内查看配置,需要使用lscpu命令并关注Hypervisor vendor字段,如果这个字段有内容,说明当前处于虚拟机内部,如果没有则说明是物理机或容器环境。
这里分享一个实用判断技巧:在容器内执行cat /proc/1/cgroup,如果路径中带有docker或kubepods等关键字,基本就可以确认当前环境是容器而非虚拟机,这个区分非常重要,因为它直接影响你排查资源问题时的判断方向。
查看配置信息后如何判断虚拟机是否需要调整
拿到配置参数只是第一步,更重要的是学会解读这些数据,很多情况下,配置够不够用需要结合业务负载来判断,不能只看配置大小。
从配置参数识别潜在的性能瓶颈
CPU配置主要看核数和主频,如果虚拟机是单核而业务是单线程密集型的,那么无论宿主机多强都跑不满;相反如果是多线程应用但核数太少,则会出现CPU等待队列拉长、负载持续走高的情况,可以通过virsh vcpuinfo查看vCPU是否绑定了不同的物理核心,如果多个vCPU绑到同一个物理核心上,性能会大打折扣。
内存配置重点看预留和上限,VMware里的内存配置分为预留(Reservation)、上限(Limit)和份额(Shares)三个维度,预留值决定虚拟机启动时直接锁定多少物理内存,上限决定最大能使用多少,如果你发现虚拟机内存监控显示正常,但业务总报内存不足,很可能是把“上限”设置得太低,低于操作系统看到的内存总量。
虚拟机卡顿怎么排查性能瓶颈
遇到虚拟机卡顿,很多人第一反应是加配置,但我建议你先按这个顺序检查一遍再动手:
- 通过
esxtop或top命令确认宿主机本身的CPU和内存是否超载,如果宿主机都扛不住了,加虚拟机配置只会更糟糕。 - 在虚拟机内部查看磁盘等待时间,如果
iowait持续偏高,优先考虑磁盘类型是否还是机械硬盘,以及是否启用了写缓存。 - 检查网络配置是否有丢包,虚拟交换机的流量策略是否限制了带宽上限。
业内专家指出,超过一半的虚拟机卡顿问题源于宿主机层面的资源竞争,而非虚拟机配置不足,单纯加高虚拟机规格,很多时候并不会带来预期的性能提升。
升级配置前先确认的关键参数
准备扩容前,有几个参数必须提前确认,避免白花钱:
- 虚拟机兼容版本:ESXi里虚拟机的硬件版本决定它能使用哪些高级功能,比如PVSCSI控制器或者VirtIO网卡,如果版本太低,有些新特性根本没法启用。
- 磁盘类型
:IDE、SATA、SCSI和NVMe在性能上差距明显,NVMe虚拟磁盘的IOPS表现远好于前几种,如果你的业务对磁盘性能敏感,光加容量不换控制器类型没有意义。
- 内存插槽配置:虚拟机同样有CPU插槽数和核心数分配方式,某些操作系统许可按照插槽数收费,合理规划核数与插槽数能节省许可成本。
| 配置项 | KVM平台查看命令 | VMware平台查看命令 |
|---|---|---|
| 基本资源 | virsh dominfo | vim-cmd vmsvc/get.summary |
| 详细硬件 | virsh dumpxml | vim-cmd vmsvc/get.config |
| 磁盘列表 | virsh domblklist | esxcli storage vmfs |
| 网卡信息 | virsh domiflist | esxcli network vm list |
| vCPU映射关系 | virsh vcpuinfo | esxcli hardware cpu |
查看虚拟机信息时常见的困惑点解答
为什么用virsh dominfo看到的内存值和虚拟机内部显示的内存不一致
出现这种情况多半是因为虚拟机的内存配置包含当前分配值与最大分配值两个参数,virsh dominfo里显示的Used memory是实际启动时分配的内存,而Max memory是配置文件中设置的上限,如果两者数值不同,说明虚拟机配置了内存热插拔功能,虚拟机内部查看的可能是当前值,用virsh dumpxml查看currentMemory和memory两个标签就能确认完整的分配逻辑。
如何确认当前这台机器到底是物理机还是虚拟机
直接在系统内运行systemd-detect-virt命令,如果是虚拟机环境,会输出类似kvm、vmware或xen的虚拟化类型标识;如果是物理机则输出none,在Windows系统中,打开设备管理器,如果处理器一栏出现“Virtual CPU”或“VCPU”等字样,基本可以确认为虚拟机环境,这个方法在简米云、酷番云等云服务器上同样适用,因为这些云主机本质上也是虚拟化实例。
虚拟机配置文件被误删后还能恢复查看信息吗
KVM环境下如果虚拟机配置文件被删除,可以尝试通过宿主机上的/var/lib/libvirt/qemu/save/或/var/lib/libvirt/qemu/checkpoint/目录下的临时状态文件来恢复部分配置,但如果这些文件也不存在,就只能通过磁盘镜像文件中的分区表信息去反推磁盘大小,至于CPU和内存配置则无法恢复,这也提醒我们,定期备份虚拟机配置文件和查看配置信息的命令结合使用,才是稳妥的运维习惯。
虚拟机配置参数的查看本质上是运维基本功的体现,掌握了命令和路径,可以极大缩短故障排查时间,把常用的几条命令记牢,确保自己随时随地都能准确说出一台虚拟机的家底,在真正遇到性能问题时就不会手忙脚乱。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/740970.html





