快速获取VM虚拟机信息靠两条路:一条是虚拟化层的命令与API,另一条是客户机内部的系统命令;有效管理的核心在于把这两类信息汇总成台账,再配合快照与资源监控形成闭环。
vm虚拟机信息查看命令有哪些?先分清两个层面
很多人在查虚拟机信息时卡在第一步搞不清该问谁要答案,VM虚拟机跑在ESXi或者Workstation上,它自身有虚拟化层的信息,客户机操作系统内部也有自己的信息,这两套数据经常对不上,比如你在虚拟机里用systeminfo看到的内存,和你在vCenter里看到的内存保留值就不是一回事,原因在于虚拟化层有开销和预留。
虚拟化层命令:不用进系统就能拿全量数据
以VMware vSphere环境为例,esxcli是首选工具,用SSH登录ESXi主机后,执行:
esxcli vm process list
这条命令能列出所有运行中的虚拟机,包括World ID、显示名称、配置文件名、vCPU数量、内存大小、网卡MAC地址,想查包括关机状态在内的全部虚拟机,用:
vim-cmd vmsvc/getallvms
返回结果带VMID和.vmx配置路径,管理脚本时非常关键,如果是Workstation用户,命令行工具路径在C:Program Files (x86)VMwareVMware Workstation下,运行vmrun list可以快速列出当前开机的虚拟机。
客户机内部命令:拿到的是系统视角
虚拟化层命令看不到操作系统内部的磁盘利用率、补丁版本或进程负载,需要进入系统执行:
- Windows客户机:
systeminfo、wmic cpu get name、wmic memorychip get capacity - Linux客户机:
lscpu、free -h、df -hT、ip addr
实际操作中,建议把这两类命令配合使用,虚拟化层告诉你分配了多少,客户机内部告诉你用了多少,两者对比才能定位资源浪费或性能瓶颈。
如何批量获取VM虚拟机信息并生成清单?
单台虚拟机用命令没问题,但生产环境动辄几十上百台,逐台SSH进去查就太低效了,这时需要PowerCLI登场VMware官方提供的PowerShell模块,专为批量管理设计。
用PowerCLI一次拉取全部虚拟机信息
安装好PowerCLI后,连接vCenter:
Connect-VIServer vcenter.example.com Get-VM | Select Name, PowerState, NumCpu, MemoryGB, Version | Export-Csv vm_inventory.csv
一条命令导出所有虚拟机的基础配置清单,带PowerState和版本号,用来做资产管理台账再合适不过,想要更细的信息,比如每台虚拟机的磁盘文件大小、网络连接情况、VMware Tools版本,继续扩展Select字段即可:
Get-VM | Get-View | Select Name, @{N='ToolsVersion';E={$_.Config.Tools.ToolsVersion}}, @{N='DiskGB';E={($_.LayoutEx.File | Where {$_.Type -eq 'diskDescriptor'} | Measure-Object Size -Sum).Sum / 1GB}}
没有vCenter时的替代方案
只有ESXi单机、没装vCenter的环境,用esxcli配合shell脚本循环也能达到类似效果,写个简单的for循环,遍历所有VMID,逐个调用vim-cmd vmsvc/get.summary提取信息,输出到CSV文件,这属于运维基本功,建议掌握,因为在最小化架构或灾备演练场景里,PowerCLI不一定可用。
小贴士:信息不一致怎么办?
经常出现的情况是PowerCLI导出的IP地址和客户机实际IP对不上,原因在于VMware Tools上报的IP可能滞后或缺失,解决思路是:以客户机内部ipconfig或ip addr的输出为准,虚拟化层的数据仅作参考,行业共识认为,以客户机内部实测数据为准是排查网络配置问题的第一原则。
VM虚拟机管理系统怎么选?免费和商业工具的取舍
工具选型取决于环境规模和预算,以下对比直接说结论:
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 小于10台、无vCenter | esxcli + vim-cmd脚本 | 零成本,学习曲线陡但可控 |
| 中小规模、有vCenter | PowerCLI + 自带性能图表 | 批量操作能力强,报表导出方便 |
| 大规模、跨平台混合 | 商业运维平台(如ManageEngine OpManager) | 统一纳管物理机和虚拟机,自动发现拓扑 |
| 个人学习、Workstation环境 | vmrun命令 | 轻量,够用 |
商业工具的真正价值在于告警和自动化,比如某台虚拟机的CPU就绪时间持续偏高,或者快照磁盘膨胀到原虚拟磁盘的80%以上,商业平台会主动推送告警,而免费方案需要你自己写监控脚本轮询。
常常有朋友问“虚拟机用什么软件管理比较好”,如果只是个人电脑上的VMware Workstation虚拟机,装个VMware Workstation Pro本身就够了,自带的“虚拟机库”面板能显示每台虚拟机的快照、磁盘空间、硬件配置,若是公司环境,选型时重点考察
是否支持批量修改配置和是否保留操作审计日志,这两项决定运维效率和安全合规。
快速获取虚拟机性能数据,定位资源瓶颈
配置信息只是静态数据,性能数据才是动态判断依据。
vCenter性能图表怎么看
登录vCenter,选中虚拟机,监控 -> 性能 -> 高级视图,重点关注四个指标:
- CPU就绪时间(Ready Time):超过10%说明CPU资源竞争严重
- 内存Swap使用率:出现持续Swap说明物理内存不足
- 磁盘I/O延时(Latency):超过20毫秒就该考虑迁移存储
- 网络丢包率:虚拟交换机层面的丢包往往被忽略
命令行层面的性能查看
不想打开图形界面时,SSH到ESXi执行:
esxtop
按c看CPU、m看内存、d看磁盘、n看网络,按Shift + M按内存使用率排序,能快速找出吃内存的虚拟机。esxtop是分析ESXi性能的唯一事实来源,vCenter的图表数据底层就来自它。
云服务器或云端虚拟机怎么查看配置信息?云平台提供了各自的控制台API,比如简米云ECS,在控制台实例列表页能直接看到规格、镜像、带宽,也可以用aliyun ecs DescribeInstances命令批量导出,云主机的“准确率”比本地VMware更高,因为虚拟化层和监控组件是云厂商统一部署的。
VM虚拟机的日常管理操作,不只是开机关机
快照管理:救命的稻草也是磁盘杀手
快照是管理虚拟机最常用的功能,但很多人拍快照后忘记清理。快照文件会持续增长,尤其是高写入负载的数据库虚拟机,快照可能在几天内耗尽数据存储,行业共识的检查周期是每周至少检查一次快照,单台虚拟机快照层级不超过3层,超过1个月的快照必须合并,用PowerCLI批量找出所有带快照的虚拟机:
Get-VM | Where {$_.Snapshot -ne $null} | Select Name, @{N='SnapCount';E={$_.Snapshot.ExtensionData.RootSnapshotList.Count}}
资源调整:扩容之前先看真实占用
接到“虚拟机卡”的反馈后,别急着加vCPU,先用PowerCLI查最近三天的CPU和内存使用率趋势:
Get-Stat -Entity vm-name -Stat cpu.usage.average, mem.usage.average -Realtime -Start (Get-Date).AddDays(-3)
如果峰值使用率不到50%,加资源解决不了问题,瓶颈可能在存储I/O或网络配置上。
虚拟机迁移和删除的注意事项
- 冷迁移前先挂起或关机,确保数据一致性
- 删除虚拟机的正确路径是“从库存中移除”再加“从磁盘中删除”,两步操作之间一定确认清楚
- 迁移到新存储后,运行
vmkfstools -E检查磁盘完整性
VMware Tools的升级纪律
VMware Tools不是始终升级最保险,新版Tools可能要求更高的客户机内核版本,老系统强行升级反而造成驱动不兼容。升级前必须查看版本兼容性列表,这是VMware官方的硬性要求。
Q&A:vm虚拟机信息获取与管理的常见问题
虚拟机配置信息导出来是乱码,怎么解决?
PowerCLI中文环境下导出CSV乱码是经典问题,解决方法是编辑$profile文件,设置$OutputEncoding = [System.Text.Encoding]::UTF8,导出时指定编码:
Export-Csv -Path vm_inventory.csv -NoTypeInformation -Encoding UTF8
用Excel打开前,先导入数据而不是直接双击文件,并在导入向导中选定UTF-8编码。
esxtop显示多个虚拟机都占满CPU,怎么判断谁在争抢?
esxtop界面按c进入CPU视图,按Shift + P按CPU使用率排序,观察%RDY列,这个值是CPU就绪时间百分比,多台虚拟机同时高就绪时间,说明宿主机CPU核数不足,按e展开单台虚拟机的CPU列表,能看到客户机内各vCPU的分配情况,若单颗虚拟CPU的%RDY持续超过20%,就是典型的主机超线程争抢。
虚拟机的.vmx配置文件可以直接编辑改参数吗?
可以但必须严谨,修改前先关机,备份原文件到另一个目录,然后用文本编辑器修改后保存,重新开机,常见的可行修改包括添加mainMem.useNamedFile = "FALSE"提升内存性能、调整ethernet0.connectionType改网络连接方式,但绝对不能手动修改scsi0:0.fileName这类磁盘路径,除非你明确知道改组影响,因为写错一个字符就会导致虚拟机无法识别磁盘,数据损坏的风险极高,正确的做法是,能用vSphere Client和PowerCLI完成的修改,就不去动.vmx文件。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/616334.html





