如何评估为什么 git clone/fetch 在 Hyper-V Server 中如此慢?

如何评估为什么 git clone/fetch 在 Hyper-V Server 中如此慢?

我在 Ubuntu Server 12.0.4 上安装了 git,并与 gitlab 协同工作。Ubuntu 本身是 Hyper-V Server 2012 R2 中的虚拟机。

我正在比较命令的性能git clone git@my-server:group/repo.git,所以它不是一个“本地 git”协议,而是始终是 SSH。

如果我通过 ssh 从同一台虚拟机克隆 - 速度显示为 ~15-20 MiB/s。从同一物理服务器上的其他虚拟机或同一 LAN 中的其他机器克隆 - 速度为 70-200 KiB/s,速度非常慢。我尝试过 Windows 和 Linux 机器。

我尝试谷歌搜索并发现一,但这似乎不是一个问题:我尝试过 a) 使用 Putty 的 PLink;b) 在 Windows 上将 OpenSSH 更新到 2014 年 1 月版本,甚至 c) 使用 Linux 机 - 但没有成功。

我尝试过使用 iperf,这肯定不是网络问题:同一虚拟机管理程序中的虚拟机之间的连接速度为 ~300-400 Mb/s,虚拟机与 LAN 中的其他机器之间的连接速度为 ~10 Mb/s(100 Mbit 以太网连接)。

所以,我的问题是 - 我如何才能找到瓶颈在哪里?我现在没有主意了。

PS 这可能不是 SSH 问题 - 通过 http 克隆显示的速度几乎相同。

答案1

事实上,你可以从 gitlab VM 以 15 MB 的速度克隆,因此这很可能是虚拟机管理程序的网络抽象层的问题。


  • 通过发送测试所有网络连接是否缓慢原始数据2 个 Linux VM 之间。

    在辅助 Linux VM 上运行:

    nc -v -l -p 4321 > /dev/null
    

    在 gitlab VM 上运行:

    dd if=/dev/zero bs=1024K count=512 | nc -v $IP_OF_FIRST_MACHINE -p 4321
    

    这将显示您的网络速度。最有可能的是慢的

  • 关闭 VMQ在虚拟机管理程序上

  • 尝试关闭巨型帧(MTU > 1500)

  • 最后,尝试在 gitlab vm 中通过 wireshark 进行 tcp 转储。看看是否有错误跳出来

答案2

检查您的 DNS 设置/服务器。我遇到了这个问题,发现这是由于我的主 DNS 无法解析 git 服务器造成的。一旦我切换主 DNS,它就会加速。看来 git 不允许缓存 DNS 查询,因此每次都必须进行故障转移。

答案3

嗯,这是一个最令人困惑的问题。你有带宽限制在您的虚拟 NIC 端口上设置了什么?如果您设置了...那可能就是它了...

只是发布这个,因为你没有在你的 OP 中提到它,它可能是一个答案,但我不确定这是否是它。

相关内容