我正在尝试在 Windows Server 2012 VM(在 Hyper-V 上运行)上实现基于策略的 QoS,但由于某种原因,它没有启动。我添加策略的方式是进入本地组策略编辑器 ==> Windows 设置 ==> 基于策略的 QoS 并为特定 exe 添加新策略(未使用路径,仅使用 exe 名称),DSCP 值为 0,节流率为 40960 作为开始。
当我运行有问题的 exe 时,它很快就开始达到 100mb/s 或更高的出站速率,这是不应该的。我尝试gpupdate /force
对服务器进行操作,但这也没有改变任何东西。最后,我将 QoS 策略更改为任何应用程序、TCP/UDP 和节流速率 40960,但这仍然没有对我进行任何限制 - 它仍然以 100mb/s 以上的速度运行,这与相当大的主机托管费用有关。
关于如何限制此 exe 的速率,您有什么想法吗?我无法为此使用我们的路由器,因为我不知道此出站流量的目标 IP - 它只是使用 DNS 到 Azure,如果他们更改了 IP,我就倒霉了。
编辑:我找到了一篇 SF 帖子(此处:如何在 Windows Server 2008 R2 中限制用户带宽) 中提到了一个名为 NetLimiter 4 的实用程序,我尝试了一下,但它似乎也没有限制,因为我的带宽仍然飙升至 90mb/s 以上。
答案1
我认为您误解了 QoS 的工作原理。
假设您在服务器上运行两个应用程序(应用程序 A 和应用程序 B),其中一个应用程序占用了最大带宽。您决定确保应用程序 A 获得更多带宽。
在这种情况下,您将定义两个策略(假设使用 exe 名称),为应用程序 A 指定 DSCP 值 10,为应用程序 B 指定 5。为应用程序 A 分配 10 MB/s 的限制值,为应用程序 B 分配 5 Mb/s 的限制值。
重要一点当 App A 单独运行时,不会限制为 10MB/s,当 App B 单独运行时,也不会限制为 5MB/s。只有当两者一起运行且存在带宽争用时,节流限制才会生效。
发生这种情况的原因是它不是一种带宽限制机制,而是一种服务质量,设计实现是优先考虑流量,而不是在有可用带宽时限制流量。
看一下这篇文章这里了解更多信息,但与上述相关的部分是
当您为 QoS 策略分配 DSCP 值时,实际上是在为出站网络流量创建一个队列。默认情况下,通过该队列的流量不会受到限制。QoS 仅在带宽争用成为问题时才限制流量。在这些情况下,优先级较低的队列会让位于优先级较高的队列。
在某些情况下,如果大量流量通过高优先级队列,高优先级队列可能会阻塞低优先级队列。在这种情况下,上图所示的对话框为您提供了限制队列出站流量的机会。这样做可以实现带宽上限,防止队列消耗过多的带宽。节流率可以以每秒千比特或每秒兆比特为单位指定。
您可能需要查看 hyper-v 管理器中 vm 配置上的带宽/qos 设置,以实现真正的带宽控制
答案2
多年来,我一直在网络领域从事 QoS 工作。我没有在 Microsoft Windows Server(任何版本)中使用过它,但我认为它们的概念是一样的。服务质量旨在控制带宽。当出现拥塞时,您可以优先处理某些类型的流量(语音和视频优先于 Web 浏览),但您需要的是流量监管/整形。通过监管,您可以设置最大带宽,超过该带宽的任何流量都会被丢弃。通过整形,多余的流量会排队并稍后传输,同时确保不超过带宽上限。
https://technet.microsoft.com/en-us/library/hh831679.aspx#bkmk_bandwidth
当为工作负载设置了“最大带宽”时,即使系统中没有其他工作负载正在使用网络带宽,该工作负载也绝不会超过上限。当为工作负载设置了“最小带宽”时,该工作负载可以使用尽可能多的带宽 - 直到发生网络拥塞。
我不知道微软的最大带宽功能是用于监管还是整形,但 TechNet 文章中的措辞让我认为你想做的事情是可能的。然而,我似乎也无法在我的 Windows 10 PC 上运行它。:/
更新日期:2015 年 10 月 23 日 我找到了一篇文章,详细介绍了您要实现的流程(交通警察单个可执行文件),但我在 Server 2008 和 Windows 10 上尝试过此操作,即使多次重启也无济于事。除了该帖子的最后一位评论者之外,其他人似乎都成功了,所以这应该可行…… https://practicalsbs.wordpress.com/2014/08/05/onedrive-throttling-upload-speed/
答案3
对于我来说,在 Win Server 2012 R2 上使用 powershell 是可行的,虽然策略获取新值大约需要 5 分钟的延迟,但还是可以工作的。
我在一台机器上以带宽模式运行 psping 作为服务器,并在端口 444 上设置策略以限制在 10Mbit/秒,443 端口保持不受限制
PS C:\windows\system32> New-NetQosPolicy -Name "Port444" -IPPort 444 -ThrottleRateActionBitsPerSecond 10Mb
Name : Port444
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
IPProtocol : Both
IPPort : 444
ThrottleRate : 10.486 MBits/sec
从另一台机器上看,443 和 444 端口带宽之间的差异如下:
PS D:\Common\Sysinternals> .\psping.exe -b -l 1K -n 10s -r -4 10.10.10.10:443
PsPing v2.10 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Setting warmup count to match number of outstanding I/Os: 16
TCP bandwidth test connecting to 10.10.10.10:443: Connected
10 seconds (16 warmup ops) receiving 1024 bytes TCP bandwidth test: 205087100%
TCP receiver bandwidth statistics:
Received = 10, Size = 1024, Total Bytes: 1175108608,
Minimum = 101.67 MB/s, Maximum = 113.49 MB/s, Average = ***112.05 MB/s***
PS D:\Common\Sysinternals> .\psping.exe -b -l 1K -n 10s -r -4 10.10.10.10:444
PsPing v2.10 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Setting warmup count to match number of outstanding I/Os: 16
TCP bandwidth test connecting to 10.10.10.10:444: Connected
10 seconds (16 warmup ops) receiving 1024 bytes TCP bandwidth test: 1850664100%
TCP receiver bandwidth statistics:
Received = 10, Size = 1024, Total Bytes: 13563904,
Minimum = 1.01 MB/s, Maximum = 1.47 MB/s, Average = ***1.24 MB/s***