1

我遇到了一个非常奇怪的问题,我不确定发生了什么。我尝试了很多排列,但我无法解决这个问题。任何见解将不胜感激。这是我的环境:

我在只能通过 Cisco VPN 访问的临时区域建立了档案和人工仓库。我不需要两个缓存,但我都尝试过尝试解决问题。

我使用 gradle 构建我的软件,但这似乎不是问题。当我的项目构建时,它会愉快地下载 POM 和 JAR 很长一段时间。然而,每次它都会“卡在”罐子上。对于下载的特定本地快照,我可以运行构建 N 次,它会挂在同一个位置。如果我删除本地缓存,它可能会挂在不同的 jar 上。

VPN 传输速率不是很好(100-200K/s),在挂起之前,它会显着减慢,一直到 0。此外,如果我在临时区域服务器中构建,则传输是通过 10G 网络和一切正常。

我使用 wget 下载了 jars,输出通常如下所示:

/tmp > wget -vS http://git-jenkins01.aus.sf:8082/artifactory/ecomm-snapshot-plus-remote/org/codehaus/groovy/groovy/1.8.6/groovy-1.8.6.jar
--2012-10-11 09:51:41--  http://git-jenkins01.aus.sf:8082/artifactory/ecomm-snapshot-plus-remote/org/codehaus/groovy/groovy/1.8.6/groovy-1.8.6.jar
Resolving git-jenkins01.aus.sf (git-jenkins01.aus.sf)... 10.57.10.226
Connecting to git-jenkins01.aus.sf (git-jenkins01.aus.sf)|10.57.10.226|:8082... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Server: Artifactory/2.6.4
  X-Artifactory-Id: 583c10bfdbd326ba:71d02e01:13a5059d090:-8000
  Last-Modified: Thu, 09 Feb 2012 17:57:32 GMT
  ETag: 553ca93e0407c94c89b058c482a404427ac7fc72
  X-Checksum-Sha1: 553ca93e0407c94c89b058c482a404427ac7fc72
  X-Checksum-Md5: e7ddf15d2f343537549dbbfd860c5f5b
  Content-Disposition: attachment; filename=groovy-1.8.6.jar
  X-Artifactory-Filename: groovy-1.8.6.jar
  Content-Type: application/java-archive
  Content-Length: 5546084
  Date: Thu, 11 Oct 2012 15:51:47 GMT
Length: 5546084 (5.3M) [application/java-archive]
Saving to: `groovy-1.8.6.jar.7'

95% [======================================================================================================================================>       ] 5,278,650   --.-K/s  eta 3s  

它总是停在 ~90% 或更多,但不会完成。日志没有给出错误指示。我已经尝试过 tomcat 6、tomcat 7、jetty、java 6、java 7,artifactory 服务器中的一个 squid 代理,试图将其欺骗到本地下载。

我和 Charles 一起检查了流量并查看了日志,据我所知,服务器认为它发送了所有数据,而客户端在等待最后几个字节时卡住了。我完全没有想法。有什么想法吗?

4

1 回答 1

2

我看到这种情况发生是因为巨型数据包被转换为标准 TCP/IP 数据包。发生的事情是 Tomcat 默认发送大型巨型数据包(缓冲区大小 -MTU- 为 9000 字节),由于网络不支持巨型数据包,因此网络路由器会将其切割成更小的数据包。因此,在某些时候,Tomcat 会在所有其他子数据包到达之前发送“数据包结束”块。结论,在收到所有数据之前它挂起或断开连接。

解决方法是将 tomcat server.xml 中的缓冲区大小更改为 1500 左右,或者将服务器的 TCP/IP 卡配置强制为 1500 MTU(对于 1G 本地网络来说很烦人)。

希望这可以帮助。

于 2012-10-14T11:31:07.903 回答