我最近获得了一个新的专用服务器,现在我正在build立。 它运行在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”调用几次。
我的服务器的主机名最初是Debian-60-squeeze-64-minimal
。 我已经通过运行hostname shell.happyponies.com
将其更改为shell.happyponies.com
,编辑/ etc / hostname并重新启动服务器。
我不明白DNS协议,但看起来Git正在试图查找Debian-60-squeeze-64-minimal
以及happyponies.com
。 为什么Debian-60-squeeze-64-minimal
尽pipe我已经改变了主机名,还是会回来的? 为什么Git会执行DNS查询? 为什么这些查询如此缓慢? 我已经validation了/etc/resolv.conf中的所有DNS服务器都已启动并且响应速度很慢,但Git自己的查找超时。
将主机名更改回Debian-60-squeeze-64-minimal似乎可以解决这个问题。
基本上我只是想解决我的服务器有任何DNS问题,因为我相信他们会导致更多的问题,只是减缓git checkout
。 但我不确定这个问题到底是什么,这些症状是什么意思。
是不是旧的主机名保存在任何gitconfiguration? 像git remote
? 看看git
可以保存主机名的所有可能的方法,并检查旧的主机名是否存在。
服务器名称也应在/etc/hosts
文件中更改。
更改服务器名称时,在/etc
上启动recursiongrep可以帮助查找旧服务器名称必须更正的每个地方:
grep -r "oldservername" /etc