pzt*_*ick 7 networking windows git msysgit
我有一个应用程序目录作为驱动器 Z 映射到我的本地计算机的开发 Web 服务器:(例如 \\web_server\wwwroot)。共享文件夹需要域凭据才能访问(我的域帐户是该文件夹的共同所有者)。
我能够很好地读写文件,但 msysGit 性能很慢。
网络服务器:
patrick@web_server /c/inetpub/wwwroot (master) $ time git status > /dev/null
real 0m1.887s
user 0m0.015s
sys 0m0.015s
Run Code Online (Sandbox Code Playgroud)
本地机器(访问映射的网络驱动器 Z)
patrick@local_machine /z (master) $ time git status > /dev/null
real 0m25.500s
user 0m0.000s
sys 0m0.015s
Run Code Online (Sandbox Code Playgroud)
那么我该如何解决导致 25 秒挂起的原因呢?
git status
是一个读写大量文件的命令。网络存储,即使是通过某些 LAN 连接,在处理大量文件或大量数据或同时处理两者时,速度可能会慢得令人无法接受。
问题是 SMB(服务器消息块,又名 Samba,又名 Windows 文件共享)是一个非常“健谈”的协议,来回发送大量小数据包,并且它需要大量“应用程序轮流”,这会扩大您需要的更多数据。“转弯”是客户端和服务器之间的往返。
一些东西:
尝试ping
从本地机器访问远程主机。如果超过,哦,5 毫秒,则网络存储可能不适合仅上传少量文件中的几千字节。还要检查抖动和数据包丢失。抖动是指 ping 在不同值之间变化很大,而丢包是指 ping 完全丢弃(没有得到响应)。两者都是非常严重的损伤,几乎和延迟一样严重。
尝试使用 WireShark 来观察主机和路由器之间的流量git status
。您可能会看到很多类似这样的 TCP 请求:
数据包从您的机器发出
对于源自您的计算机并以远程设备为目的地的每个数据包,将该数据包标记为“O”以表示“出站”。对于源自远程盒并以您的计算机为目的地的每个数据包,将该数据包标记为“I”以表示“入站”。
解决方案:减少延迟,或使用较新版本的 Windows Server 支持的较新版本的 SMB 协议(应用程序轮次较少,因此在 WAN 上的性能更高),或使用诸如 FTP 之类的东西,它的聊天率非常低(但仍然访问大量文件时的高开销),或者直接在服务器上操作,仅根据需要批量传输数据(例如,zip 文件)到远程服务器。
归档时间: |
|
查看次数: |
4646 次 |
最近记录: |