I have recently obtained a new dedicated server which I'm now setting up. It's running on 64-bit Debian 6.0. I have cloned a fairly large git repository (177 MB including working files) onto this server. Switching to a different branch is very very slow. On my laptop it takes 1-2 seconds, on this server it can take half a minute. After some investigation it turns out to be some kind of DNS timeout. Here's an exhibit from 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)
This snippet repeats several times per 'git checkout' call.
My server's hostname was originally Debian-60-squeeze-64-minimal
. I had changed it to shell.happyponies.com
by running hostname shell.happyponies.com
, editing /etc/hostname and rebooting the server.
I don't understand the DNS protocol, but it looks like Git is trying to lookup the IP for Debian-60-squeeze-64-minimal
as well as for happyponies.com
. Why does Debian-60-squeeze-64-minimal
come back even though I've already changed the host name? Why does Git perform DNS lookups at all? Why are these lookups so slow? I've already verified that all DNS servers in /etc/resolv.conf are up and responding slowly, yet Git's own lookups time out.
Changing the host name back to Debian-60-squeeze-64-minimal seems to fix the slowness.
Basically I just want to fix whatever DNS issues my server has because I'm sure they will cause more problems that just slowing down git checkout
. But I'm not sure sure what the problem exactly is and what these symptoms mean.
Isn't the old hostname saved on any git configuration? Like
git remote
? Take a look on all possible ways wheregit
can save a hostname and check if the old hostname is there.The server name should be changed in the file
/etc/hosts
as well.When changing a server name, launching a recursive grep on
/etc
can help to find every places where the old server name has to be corrected :