【问题标题】:Permanent 'Temporary failure in name resolution' after running for a number of hours运行数小时后永久“名称解析暂时失败”
【发布时间】:2011-12-02 12:45:05
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否正在关闭较早的 HTTPRequest(或您正在使用的任何东西)?
  • 正在尝试。我刚刚注意到我有大量与问题相关的 CLOSE_WAIT 连接。

标签: python urllib2 httplib


【解决方案1】:

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

【讨论】:

  • 这个问题到底是什么时候解决的?我认为错误是由 httplib 库引起的?
  • 其次,请提供更多关于您的发现的详细信息,谢谢!
  • @2371:你怎么知道是资源枯竭了?
  • 我在 python 请求中遇到了类似的问题。解决方案是通过会话对象docs.python-requests.org/en/master/user/advanced/… 使用连接池
【解决方案2】:

遇到同样的问题,在我的情况下不是资源耗尽,当我的 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之前使用它,希望对你有帮助

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2012-04-17
    • 2019-05-10
    • 2019-06-21
    相关资源
    最近更新 更多