Server 2012 R2上IIS对远程客户端传输速率极低问题求助
排查Server 2012 R2 IIS传输速率极低的问题
从你描述的情况来看——RTT150ms、链路带宽100Mbps但实际只有500kbps,加上Wireshark抓包显示IIS在等待ACK前最多发3个包——这大概率是TCP窗口配置不足或者IIS的TCP参数没适配高延迟环境导致的。咱们一步步来解决:
1. 先搞定TCP窗口缩放与自动调优
带宽延迟乘积(BDP)是核心:你的链路BDP = (100Mbps × 0.15s) / 8 = 1.875MB。这意味着要填满带宽,TCP发送窗口至少要能容纳这么多数据。但Server 2012 R2如果没开启TCP窗口缩放,默认窗口最大只有64KB,远达不到需求,自然会出现“发几个包就等ACK”的情况。
先检查当前TCP全局设置:
netsh int tcp show global看“TCP Window Scaling”是否为
enabled,“Receive Window Auto-Tuning Level”是否为normal(不推荐highlyrestricted)。如果不是,开启自动调优:
netsh int tcp set global autotuninglevel=normal这个命令让系统根据网络状况自动调整TCP窗口大小,适配高延迟链路。
2. 调整IIS的TCP发送缓冲区与连接参数
即使系统层面的TCP设置没问题,IIS自身的限制也可能拖后腿:
- 检查站点的高级设置:右键站点 → 管理网站 → 高级设置,确保“连接限制”的“最大并发连接数”没有被手动设得过低(默认是4294967295,一般不用改,但如果被调小了要改回来)。
- 修改注册表适配网卡TCP参数:
- 打开注册表编辑器,定位到
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces,找到对应服务器网卡的GUID子项(可通过ipconfig /all的“物理地址”匹配注册表中的PhysicalAddress值)。 - 新建
DWORD值TcpWindowSize,设为十进制2097152(2MB,接近咱们计算的BDP值);再新建DWORD值TcpNoDelay,设为1(禁用Nagle算法,避免高RTT下的小包合并延迟)。
- 打开注册表编辑器,定位到
3. 验证MTU是否正常
如果服务器的MTU被限制成很小的值(比如576字节),3个包的总数据量就极少,传输速率自然上不去:
- 查看当前MTU设置:
确保对应网卡的MTU是netsh interface ipv4 show subinterfaces1500(默认以太网MTU),如果不是,用以下命令修改:netsh interface ipv4 set subinterface "你的网卡名称" mtu=1500 store=persistent
4. 排除QoS或防火墙限制
有时候本地QoS策略或者防火墙会偷偷限制带宽:
- 检查是否有QoS策略:
如果看到针对IIS端口(默认80/443)的限速策略,直接删除。netsh qos show policy - 临时关闭服务器本地防火墙(Windows Defender防火墙),测试传输速率是否恢复,排除防火墙规则的影响。
最后验证
修改完设置后重启IIS(执行iisreset命令),再用Wireshark抓包,看看发送端在等待ACK前能发送的数据包数量是否明显增加,同时测试传输速率是否接近链路带宽。
内容的提问来源于stack exchange,提问作者Adrien
相关产品推荐
相关产品推荐

