题 在运行数小时后永久“名称解析暂时失败”


在Linux上运行了几个小时后,我使用urllib2,httplib和线程的Python 2.6程序开始为每个请求引发此错误:

<class 'urllib2.URLError'> URLError(gaierror(-3, 'Temporary failure in name resolution'),)

如果我重新启动程序,它会再次开始工作。我的猜测是某种资源枯竭但我不知道如何检查它。我该如何诊断并解决问题?


16
2017-12-02 12:45


起源


您是否关闭了早期的HTTPRequests(或者您正在使用的任何内容)? - Chris Morgan
尝试去。我刚刚注意到我有大量CLOSE_WAIT连接必须与问题相关。 - 2371


答案:


这是由于库无法关闭连接导致大量连接陷入CLOSE_WAIT状态。最终,由于资源耗尽,这会导致“名称解析暂时失败”错误。


12
2017-12-04 15:20



什么时候修复这个问题?我假设错误是由httplib库引起的? - pkaleta
借调,请提供有关您的调查结果的更多详情,谢谢! - Henrik Heimbuerger
@ 2371:你是怎么发现资源耗尽的? - rajpy
我遇到了类似的python请求问题。解决方案是通过会话对象使用连接池 docs.python-requests.org/en/master/user/advanced/... - TimSC


遇到了同样的问题,在我的情况下,它没有资源耗尽,我的问题发生在我的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之前使用它,希望这会有所帮助


0
2018-04-20 15:13