我最近获得了一台新的专用服务器,现在正在设置它。它运行在 64 位 Debian 6.0 上。我已经将一个相当大的 git 存储库(包括工作文件在内共 177 MB)克隆到此服务器上。切换到不同的分支非常非常慢。在我的笔记本电脑上需要 1-2 秒,而在此服务器上可能需要半分钟。经过一番调查,原来是某种 DNS 超时。以下是来自 的一张图strace -s 128 git checkout release
:
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=132, ...}) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 5
connect(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("213.133.99.99")}, 16) = 0
poll([{fd=5, events=POLLOUT}], 1, 0) = 1 ([{fd=5, revents=POLLOUT}])
sendto(5, "\235\333\1\0\0\1\0\0\0\0\0\0\35Debian-60-squeeze-64-minimal\n\17happyponies\3com\0\0\1\0\1", 67, MSG_NOSIGNAL, NULL, 0) = 67
poll([{fd=5, events=POLLIN}], 1, 5000) = 0 (Timeout)
每次“git checkout”调用时,此代码片段都会重复多次。
我的服务器的主机名最初是。我通过运行、编辑 /etc/hostname 并重新启动服务器Debian-60-squeeze-64-minimal
将其更改为。shell.happyponies.com
hostname shell.happyponies.com
我不懂 DNS 协议,但看起来 Git 正在尝试查找 的 IPDebian-60-squeeze-64-minimal
以及 的 IP happyponies.com
。为什么Debian-60-squeeze-64-minimal
即使我已经更改了主机名, 仍然会返回?Git 为什么要执行 DNS 查找?为什么这些查找这么慢?我已经验证了 /etc/resolv.conf 中的所有 DNS 服务器都已启动且响应缓慢,但 Git 自己的查找超时了。
将主机名改回 Debian-60-squeeze-64-minimal 似乎可以解决速度缓慢的问题。
基本上我只想修复我的服务器的所有 DNS 问题,因为我确信它们会导致更多问题,而不仅仅是速度变慢git checkout
。但我不确定问题到底是什么,以及这些症状意味着什么。
答案1
旧主机名是否保存在任何 git 配置中?比如git remote
?查看所有git
可以保存主机名的方法,并检查旧主机名是否存在。
答案2
文件中的服务器名称/etc/hosts
也应更改。
更改服务器名称时,启动递归 grep/etc
可以帮助找到需要更正旧服务器名称的每个地方:
grep -r "oldservername" /etc