【问题标题】:Persistent DNS caching not utilized by Python's socket.getaddrinfo/mercurialPython 的 socket.getaddrinfo/mercurial 未使用持久 DNS 缓存
【发布时间】:2011-09-30 02:44:53
【问题描述】:

当我通过一个调制解调器/ISP 连接时,我的 Ubuntu 机器上的 DNS 查找速度很慢。我按照说明(例如那些 here)使用持久 DNS 缓存,所以我不重复 DNS 查找,一切都变得更快了。但是,我注意到当在 mercurial 上拉/推 repos 时,即使传输非常小的更改也会非常缓慢。深入研究,我发现所有时间都被_socket.getaddrinfo 占用,即DNS 查找。为什么即使所有 Web 浏览器都使用 /etc/pdnsd.conf 中的信息来使用旧的 dns 查找,pythons 套接字却没有。如何让 mercurial 使用缓存查找?

更新

也可能是因为getaddrinfo试图同时获取ipv4和ipv6地址,只有在没有找到ipv6地址后才返回答案。我不确定如何检查这一点,即延迟是由于 ipv6、非持久性还是两者兼而有之。

更新

这可能与 ipv6 请求有关,正如答案 here 中所建议的那样,一旦有机会,我将不得不检查一下。

【问题讨论】:

    标签: python sockets caching mercurial dns


    【解决方案1】:

    感谢 python 列表中的这个post,看来如果你使用 BIND,那么 python 的 getaddrinfo 使用缓存的 DNS 查找。安装 BIND 并启动它后,重复的 DNS 查找是即时的。

    【讨论】:

    【解决方案2】:

    Python 的 socket.getaddrinfo() 使用操作系统的 getaddrinfo()(通过 libc)。 – 这与 Python 完全无关。如果 pdns 已配置为在解析链中,则不同的解析速度由不同的请求决定。 – 更仔细地查看 exact getaddrinfo() 请求哪个快,哪个慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2015-03-16
      • 1970-01-01
      • 2023-03-19
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多