为什么我的主机名解析需要这么长时间?
几个月前,我注意到我的文本编辑器(emacs)和IDE(IntelliJ)花费了很长时间才能启动。时间似乎因OS X使用的DNS服务器而异。 当项目的测试套件运行缓慢时,我能够找出问题所在。我发现(较高级别的)罪魁祸首是对的致电socket.getfqdn()。 在OS X 10.10.2的终端上运行以下命令将演示此问题: $ time python -c 'import socket; socket.getfqdn()' python -c 'import socket; socket.getfqdn()' 0.02s user 0.00s system 0% cpu 5.122 total 我跟踪了在socket.getfqdn()调用时运行的代码,并且延迟是由引起的getaddrinfo(3)。我编写了一个小程序来隔离问题并gai_strerror(3)提供以下消息: $ time ./hostinfo Hostname: MacBook-Pro.local getaddrinfo: nodename nor servname provided, or not known ./hostinfo 0.00s user 0.00s system 0% cpu 5.101 total 似乎延迟正在等待DNS查询超时。以上结果是使用Google的公共DNS服务器。但是,如果使用ISP的DNS服务器,则时间会增加到30秒: …