2011-07-07 54 views
4

當我通過一個調制解調器/ ISP連接時,我以前在我的Ubuntu機器上的DNS查詢速度很慢。我遵循指示(如here)使用持久DNS緩存,所以我不重複DNS查找,並且所有內容都變得更快。不過,我注意到,當在mercurial上拉回推回購時,甚至轉移非常小的變化也是非常緩慢的。更深入地看,我發現所有的時間都是由_socket.getaddrinfo,即DNS查找。爲什麼即使所有的Web瀏覽器都使用/etc/pdnsd.conf中的信息來使用舊的dns查找,pythons套接字也不會。我怎樣才能讓mercurial使用緩存查找?持久性DNS緩存沒有被Python的socket.getaddrinfo/mercurial使用

更新

這也可能是因爲getaddrinfo試圖讓IPv4和IPv6地址,並未能找到IPv6地址後只返回了答案。我不知道如何檢查這個,也就是說,延遲是由於IPv6,非持久性還是兩者兼而有之。

更新

,這可能與IPv6請求作爲答案here建議,我會檢查,一旦我得到一個機會。

回答

1

感謝這個post在python列表中,似乎如果你使用BIND,那麼python的getaddrinfo使用緩存的DNS查找。在安裝BIND並啓動它之後,重複的DNS查詢是即時的。

+0

我認爲引用的電子郵件現在已轉移到https://mail.python.org/pipermail/python-list/2011-July/607822.html – jamesc

1

pythons socket.getaddrinfo()使用操作系統的getaddrinfo()(通過libc)。 - 這與Python 在所有無關。如果pdns已被配置爲處於分辨率鏈中,則不同的分辨率速度會根據不同的請求進行分組。 - 仔細查看哪些確切的 getaddrinfo()請求很快,這很慢。