在 Linux 上运行几个小时后,我使用 urllib2、httplib 和线程的 Python 2.6 程序开始为每个请求引发此错误:
<class 'urllib2.URLError'> URLError(gaierror(-3, 'Temporary failure in name resolution'),)
如果我重新启动程序,它会再次开始工作。我的猜测是某种资源耗尽,但我不知道如何检查它。如何诊断和解决问题?
这是由于库未能关闭连接,导致大量连接卡在 CLOSE_WAIT 状态。最终,由于资源耗尽,这会导致“名称解析中的临时失败”错误。
遇到同样的问题,在我的情况下不是资源耗尽,当我的 dhcp 服务器更改名称服务器地址时,我的问题发生了,libc 不想玩球并重新加载新的 resolv.conf 文件,维护缓存的文件并强制我每次更改脚本时都重新启动脚本。
在此之后,我所有的 python 套接字连接尝试都失败了,所以我找到了解决这种情况的代码:
import ctypes
try:
libc = ctypes.CDLL('libc.so.6')
res_init = getattr(libc, '__res_init')
res_init(None)
except:
pass
在调用socket.connect之前使用它,希望这会有所帮助