过去,当通过一个调制解调器/ISP 连接时,我的 Ubuntu 机器上的 DNS 查找速度非常慢。我按照说明(例如那些 here )使用持久性 DNS 缓存,这样我就不会重复进行 DNS 查找,一切都变得更快了。但是,我注意到在 Mercurial 上拉/推 repos 时,即使传输非常小的更改也非常缓慢。深入观察,我发现所有时间都被 _socket.getaddrinfo
占用了,即 DNS 查找。为什么即使所有网络浏览器都使用 /etc/pdnsd.conf
中的信息来使用旧的 dns 查找,pythons 套接字却没有。我怎样才能让 Mercurial 使用缓存查找?
更新
也可能是因为getaddrinfo尝试同时获取ipv4和ipv6地址,只有在找不到ipv6地址后才返回答案。不过,我不确定如何检查这一点,即延迟是由于 ipv6、非持久性还是两者兼而有之。
更新
它可能与 ipv6 请求有关,如答案 here 中所建议的那样,一旦有机会,我将不得不检查一下。
最佳答案
多亏了这个post在 python 列表上,似乎如果你使用 BIND,那么 python 的 getaddrinfo 使用缓存的 DNS 查找。安装并启动 BIND 后,重复的 DNS 查找是即时的。
关于python - Python 的 socket.getaddrinfo/mercurial 未使用持久性 DNS 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605154/