适用场景
一台虚拟机向其他设备持续上传文件时,可能占用大量共享链路带宽,让其他业务明显变慢。本文面向 Windows Server 2022、2025 上使用普通合成虚拟网卡的 Hyper-V 环境,目标是只调整指定虚拟机的一张网卡,为它设置发送带宽上限。
先选择非关键虚拟机练习,并使用经过普通虚拟交换机路径的连接。涉及硬件直通、特殊加速或集中管理策略的环境,应先按对应方案核对支持条件。本文以发送文件的方向验证效果,不把这个设置当作整个网络的双向流量配额。
原理与单位
最大带宽参数限制虚拟网卡可使用的带宽上限,不会提高物理链路速度,也不会保证业务一定达到该速度。参数单位是比特每秒;一亿比特每秒即一百兆比特每秒,换算成十进制字节约为每秒一千二百五十万字节,实际文件吞吐还会受到协议开销、磁盘和对端性能影响。
官方文档规定,MaximumBandwidth 为零表示关闭此项限制,输入值会舍入为八的倍数。不要把 PowerShell 的容量后缀误认为网络速率单位,本文直接使用完整整数。参数定义
准备工作
在承载目标虚拟机的宿主机上打开管理员权限的 Windows PowerShell,确认已安装 Hyper-V 管理模块。准备一台有权使用的接收设备和一个不含敏感数据的大文件,保证测试不会写满接收端磁盘。
记录测试时段、传输方向和原始速度。尽量让文件足够大,使传输持续数十秒以上,避免只看到缓存造成的瞬间峰值。暂时停止同一虚拟机上的其他大量传输,以便判断变化原因。
分步骤操作
第一步:选择虚拟机并列出网卡
下面通过交互输入填写实际虚拟机名称,不需要在命令中填写账号或密码。
$vmName = Read-Host '输入实际虚拟机名称'
Get-VMNetworkAdapter -VMName $vmName |
Format-Table Name, SwitchName, MacAddress
对照网卡名称、交换机和来宾网卡的 MAC 地址确定目标。查询命令可以列出指定虚拟机的网卡,不能只凭列表第一行猜测用途。网卡查询说明
第二步:精确选中一张网卡并保存原值
$nicName = Read-Host '输入目标虚拟网卡名称'
$target = @(Get-VMNetworkAdapter -VMName $vmName |
Where-Object { $_.Name -eq $nicName })
if ($target.Count -ne 1) {
throw '未唯一匹配网卡,请核对名称后重新选择'
}
$oldLimit = [int64]$target[0].BandwidthSetting.MaximumBandwidth
$oldLimit
将输出的原值和网卡对应关系另外记录下来。未配置带宽设置时,相关属性可能为空,转换后得到零;这表示恢复时可以关闭最大带宽限制。当前会话里的变量只用于方便操作,关闭窗口后不能依赖它继续保存记录。
第三步:设置一百兆比特每秒上限
$target[0] | Set-VMNetworkAdapter -MaximumBandwidth 100000000
这条命令只对已经选中的对象应用设置。数值一亿是本次练习的上限示例,正式使用应根据业务需求确定。无需为这次练习调整最小带宽、交换机权重或其他虚拟机的配置。
第四步:重新读取实际配置
$check = Get-VMNetworkAdapter -VMName $vmName |
Where-Object { $_.Name -eq $nicName }
$check.BandwidthSetting | Format-List MaximumBandwidth
重新查询比查看旧对象更可靠。正常应看到一亿这个数值;若不是预期结果,应先处理配置问题,再开始传输验证。厂商方案也采用读取 BandwidthSetting 的方式检查带宽限制。属性读取示例
验证方法
让目标虚拟机向准备好的接收端发送同一个文件,保持协议、对端、路径和观察时长一致。记录稳定阶段的平均速度,再与修改前的数据比较。若原速度本来就低于上限,设置后没有明显变化是正常的,不能据此认定功能失效。
同时检查其他业务是否恢复响应。配置值正确和业务效果改善是两项证据:前者说明设置已保存,后者说明它确实作用于当前问题中的传输路径。
常见错误
最容易混淆的是每秒兆字节与每秒兆比特,相同数字可能相差约八倍。另一种错误是选中了管理网卡或备用网卡,而文件实际从另一张网卡发送。多张网卡分别配置的上限也不能直接视为整台虚拟机的总上限。
如果速度明显低于设定值,先检查磁盘、对端负载和已有应用限速。如果重新读取的值被自动改回,应核对是否有集中管理系统持续下发配置,不要与管理策略反复相互覆盖。
安全与回退
本次改动可能影响该网卡承载的全部业务流量,因此应从实验机开始。出现超时或吞吐不足时,使用原值回退:
$target[0] | Set-VMNetworkAdapter -MaximumBandwidth $oldLimit
如果已经关闭会话,应重新执行选择步骤,并把记录的原始整数用于恢复。恢复后重新查询配置,再用正常业务检查连通性。不要为了追求速度关闭防火墙或跳过既有访问控制。
参考资料与转载说明
- Microsoft Learn:Set-VMNetworkAdapter
- Microsoft Learn:Get-VMNetworkAdapter
- Cisco:Microsoft Azure Stack HCI 方案中的最大带宽限制与属性核验
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?