运行数小时后持续出现“名称解析中的永久性临时故障”

21
在Linux上运行几个小时后,我使用urllib2、httplib和线程的Python 2.6程序开始为每个请求引发以下错误:<class 'urllib2.URLError'> URLError(gaierror(-3, '名称解析中的临时故障'),)。如果我重新启动程序,则它会再次正常工作。我猜测是某种资源耗尽,但我不知道如何检查它。如何诊断和解决问题?

2
你是否关闭了之前的HTTP请求(或者你正在使用的任何其他请求)? - Chris Morgan
1
尝试中。我刚刚注意到我有大量的CLOSE_WAIT连接,这可能与问题有关。 - 2371
2个回答

19

这是由于某个库没有关闭连接,导致大量连接处于CLOSE_WAIT状态而无法释放。最终,由于资源耗尽,这会导致“名称解析临时失败”错误。


12
这个问题是什么时候被解决的?我猜测错误是由httplib库引起的? - pkaleta
10
同意,请提供更多有关您所发现的细节,谢谢! - Henrik Heimbuerger
9
你是如何发现这是由于资源耗尽导致的? - rajpy
3
我遇到了Python requests模块的一个类似问题。解决方法是通过使用会话对象连接池来解决,具体请参考http://docs.python-requests.org/en/master/user/advanced/#session-objects。 - TimSC

0

我遇到了同样的问题,但在我的情况下并不是资源耗尽的问题。问题出现在我的dhcp服务器更改了名称服务器地址时,libc不想重新加载新的resolv.conf文件,而是保持缓存的文件,这迫使我每次更改后都必须重新启动脚本。

在此之后,我所有的Python套接字连接尝试都失败了,所以我找到了this code来解决这个问题:

import ctypes
try:
    libc = ctypes.CDLL('libc.so.6')
    res_init = getattr(libc, '__res_init')
    res_init(None)
except:
    pass

使用它在调用 socket.connect 之前,希望这可以帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接