在AWS EC2 Windows Server 2008实例上的TomEE服务器上下载速度较慢

我有一台在Windows Server 2008 AWS m1.medium实例上运行的Tomee 1.5.1机器。

我把2.5 MB的静态.jpg文件放在服务器上,用我的电脑在我的机器上用Chrome下载它大概需要25 seconds

观察Wireshark中的stream量时,我发现当接收器窗口为256,缩放因子为256(左移8)时,接收器的Window Size64 KBbytes上保持不变。

在这里输入图像说明

典型的交换是:

捕获

消除的因素

  1. 服务器过载 – 不是。

  2. 服务器的带宽很低 – 至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。

需要检查以下内容:

  1. 低ping连接的最佳输出缓冲区大小是多less? 我想大约64k可以。
  2. 如何configurationSSL输出缓冲区
  3. 尝试更新版本的tomee – 有更新的http连接器
  4. 检查NIO连接器
  5. 为什么ACK分批到达?

编辑4:

  1. 64k的缓冲区大小有点不同。 我以128k解决了安全问题。

  2. 如果我们在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