我们有一个运行 Jenkins(1.477、1.480.3 和 1.508)的 VM(在 VMWare 集群中)来构建提交到我们的 SVN 存储库(Collabnet SVN 1.7.5-3150.92)。通过 SSL 连接访问存储库。出于安全原因,两台计算机(构建服务器或 SVN 服务器)都无法访问互联网。当 Jenkins 构建开始 SVN 更新时,作业的控制台会在更新“ https://vcfs01.redacted-address.com/svn/MTCM/Trunk ”时暂停 30 - 90 秒。一旦更新开始,它就会相当快。
为了排除 Jenkins 是罪魁祸首,我通过使用 TortoiseSVN 从构建服务器签出来重现了同样的问题。Tortoise 也会出现同样的延迟,一旦文件开始传输,传输速率范围为 50 - 70 KB/s(这很好)。
我们使用卡巴斯基,并已将其排除为问题,因为在具有卡巴斯基的程序员 PC 上不会出现此问题。我们还尝试排除两台服务器只是为了确定 %100。
有一段时间我确信这是证书吊销检查的问题,因为我在 WireShark 中看到来自http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab?dca976bb02bdc2e3的尝试 HTTP GET . 使用此知识库文章中的步骤,我在 Jenkins 服务器和 SVN 服务器上禁用了证书吊销检查(尽管我怀疑后者是否重要)。进行此更改后,我不再尝试连接到 windowsupdate 服务器,而是看到了来自http://crl.globalsign.com/gs/gsorganizationvalg2.crl的 HTTP GET 。我偶然发现了这篇关于禁用 CRL 检查的文章. 我对两个服务器都按照那里的步骤操作,不再看到对外部(互联网)地址的 HTTP GET。
当 Jenkins 服务器可以访问 Internet 时,Tortoise 中的握手需要大约 5 秒(而防火墙阻止访问时大约需要 90 秒)。尽管 Tortoise 的握手速度很快,但 Jenkins 的握手速度与防火墙安装时的速度相同!
我对 Jenkins 做了一些研究(我也将 Jenkins 从版本 1.477 更新到了 1.508),发现了一篇关于 SVNKit has questions with symbolic links 的文章。据我所知,没有使用任何符号链接。
我在 WireShark 中看到的是 Jenkins 服务器和 SVN 服务器之间有一些初始活动(创建加密连接)。在初始活动约 30 秒过去后,会有更多活动(发送应用程序数据)。在应用程序数据之后还有大约 30 秒的延迟,然后发送更多应用程序数据,加密连接被重置,更新开始。
我与网络小组讨论了@Chris 和@Barmar 所写的内容,网络小组说:
我们的 DNS 服务器已经有一个反向 168.192 查找区域,并且填充了很多服务器。除了搜索内部服务器的旧流氓条目外,我很少需要对这些区域做任何事情。
我认为这意味着这不是查找问题,但我在这里不知所措。这是 Jenkins 机器 (172.25.2.106) 和 SVN 服务器 (172.25.2.106) 之间的过滤捕获,显示了数据包传输之间的暂停:
这两个都是 Win2K8 R2 Datacenter VMware 机器。根据我们的网络组,这些服务器的 DNS 条目/查找已配置并正常工作。