我有一台在Windows Server 2008 AWS m1.medium实例上运行的Tomee 1.5.1机器。
我把2.5 MB的静态.jpg文件放在服务器上,用我的电脑在我的机器上用Chrome下载它大概需要25 seconds 。
观察Wireshark中的stream量时,我发现当接收器窗口为256,缩放因子为256(左移8)时,接收器的Window Size在64 KBbytes上保持不变。
典型的交换是:
消除的因素 :
服务器过载 – 不是。
服务器的带宽很低 – 至less从服务器初始化连接时不是这样。 在服务器机器上运行ookla speedtest时,我的位置周围的一些基准testing提供商显示大约60 Mbps的上行/下行链路。
3.接收器速度慢/configuration错误 – 不是 – 在2秒内从某个文件共享服务器下载相同的文件。 随着交通/拥堵的增加,窗口大小会随之增大,并且会更大。
编辑1
禁用启发式在cliend没有帮助
编辑2
另一个问题是,为什么发送者似乎发送的数据是1460 * 6 + 240 = 9000个字节的系列,并且没有多于一个“优秀”系列,这意味着他一旦发现了一个新的数据,前一堆
编辑3:
事实certificate,http连接器有一个设置socketBuffer – “为缓冲区输出缓冲区提供的缓冲区大小(以字节为单位) socketBuffer 1可以指定禁止使用缓冲区。默认情况下,缓冲区为9000字节将被使用。“ – 这些正好是我们看到的即将离任的批次的9000个字节。
可能的情况是,tcp驱动程序将传出的数据包存储在缓冲区中,以便在需要的情况下进行重新传输,直到得到确认,并且由于某种原因,客户端数据库正在批量返回,从而批量传输stream量。
如果我们将其更改为4MB,批量增加到64KB …
如果stream量不是SSLencryption的。 如果SSL打开,批处理是16kb。
需要检查以下内容:
编辑4:
64k的缓冲区大小有点不同。 我以128k解决了安全问题。
如果我们在Windows Server 2016上使用Tomee 7,SSL的运行速度与普通的httpstream量一样快。 现在我不知道tomcat5-win2008和tomcat7-win2016之间发生了什么变化。
在Windows中,似乎有两件事情要讨论,首先检查你当前的configuration:
netsh int tcp show global
通常build议closures自动调谐,但是这也会closures调节。 所以使用restricted似乎实际上是更好的缩放。 closures自动调谐也将禁用缩放,所以不要这样做。
还有一些人报告说,禁用客户端上的窗口缩放启发式使得该function更加一致。 当Windows低估链接质量时,256 * 255似乎是典型的组合。
另请查看关于客户端和服务器端(特别是Windows)的PSH优化的文章。 它确实从我的序列图中看到,客户端等待太长时间来检查数据包(等待服务器的PSH)。 http://smallvoid.com/article/winnt-tcp-push-flag.html