AWS EC2 Windows Server 2008 实例上的 TomEE 服务器下载时间很慢

AWS EC2 Windows Server 2008 实例上的 TomEE 服务器下载时间很慢

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

我在服务器上放置了一个静态.jpg文件2.5 MB,然后我花了一些时间25 seconds用 Chrome 将它下载到我的机器上。

当观察 Wireshark 中的流量时,我发现当接收器窗口为 256 且缩放因子为 256(左移 8)时,接收器Window Size恒定为。64 KBbytes

在此处输入图片描述

典型的交流是:

捕获

消除的因素

  1. 服务器超载了——但事实并非如此。

  2. 服务器带宽较低 - 至少在从服务器初始化连接时带宽较低。在服务器机器上运行 ookla speedtest 到我所在位置附近的一些基准提供商时,显示上行/下行链路约为 60 Mbps。

3.接收器速度慢/配置错误 - 事实并非如此 - 同一个文件在 2 秒内从某个文件共享服务器下载。窗口大小会随着流量/拥塞的增加而增加,并且会变得更大。

在此处输入图片描述

编辑1

在客户端禁用启发式方法没有帮助

编辑2

另一个问题是,为什么发送方似乎发送了一系列 1460*6+240=9000 字节的数据,并且没有超过一个“未完成”的系列,这意味着他在收到前一个系列的确认后就发送了新的系列

在此处输入图片描述

编辑3:

事实证明,http 连接器有一个设置socketBuffer- “为套接字输出缓冲提供的缓冲区的大小(以字节为单位)。可以指定 -1 来禁用缓冲区的使用。默认情况下,将使用 9000 字节的缓冲区。” - 这些正是我们看到的传出批次的 9000 字节。

类似地,tcp 驱动程序将传出的数据包存储在缓冲区中,以便在需要时重新传输它们,直到它获得确认,并且由于某种原因,客户端确认会分批返回,因此传出的流量会被分批处理。

如果我们将其更改为 4MB,则批处理将增加到 64KB......

如果流量未经过 SSL 加密。如果启用了 SSL,则批处理为 16kb。

需要检查以下内容:

  1. 对于低 ping 的连接,最佳输出缓冲区大小是多少?我认为 64k 左右就可以了。
  2. SSL输出缓冲区如何配置
  3. 尝试更新版本的 tomee - http 连接器有更新
  4. 查看 NIO 连接器
  5. 为什么 ACK 是分批到达的?

编辑4:

  1. 64k 的缓冲区大小有点不同。为了安全起见,我选择了 128k。

  2. 如果我们在 Windows Server 2016 上使用 Tomee 7,SSL 的工作速度与常规 http 流量一样快。目前我不知道 tomcat5-win2008 和 tomcat7-win2016 之间的变化何时发生。

答案1

对于 Windows 来说似乎有两件事要讨论,首先检查您当前的配置:

netsh int tcp show global

通常建议关闭自动调整,但这也会关闭缩放。因此使用restricted似乎实际上更有利于缩放。关闭自动调整也会禁用缩放,所以不要这样做。

还有一些人报告说,在客户端上禁用窗口缩放启发式方法会使该功能被更一致地请求。当 Windows 低估链接质量时,256*255 似乎是一个典型的组合。

另请查看这篇关于客户端和服务器端 PSH 优化的文章(尤其是针对 Windows)。从您的序列图中,我确实发现客户端等待确认数据包的时间太长(等待来自服务器的 PSH)。http://smallvoid.com/article/winnt-tcp-push-flag.html

相关内容