2011-12-02 63 views
14

为一些在Linux上,我的Python 2.6的程序时使用的urllib2,httplib的和线程,运行后之后“的名称解析临时故障”开始提出这个误差为每一个请求:永久运行了几个小时

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

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

+2

你早收盘HTTPRequests的(或者你在用什么)? –

+0

试图。我只注意到我有大量的CLOSE_WAIT连接必须与问题相关。 – 2371

回答

12

这是由于库未能关闭连接而导致大量连接停留在CLOSE_WAIT状态。最终这会导致由于资源耗尽导致的“名称解析中的临时失败”错误。

+12

究竟是什么时候解决了这个问题?我认为这个错误是由httplib库引起的? – pkaleta

+10

借调,请提供您的调查结果的更多细节,谢谢! –

+8

@ 2371:你是如何发现这是由于资源枯竭? – rajpy

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之前使用它,希望这有助于