运行几个小时后出现永久性gaierror '名称解析临时失败'。

6

我有一个长时间运行的Python脚本,使用upstart启动。该脚本会发出相当多的请求。一开始一切都正常,但几个小时后,每个请求都会永久性地收到以下错误:

  File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/client.py", line 119, in request
  File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/http_core.py", line 420, in request
  File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/http_core.py", line 489, in _http_request
  File "/usr/lib/python2.7/httplib.py", line 931, in endheaders
  File "/usr/lib/python2.7/httplib.py", line 794, in _send_output
  File "/usr/lib/python2.7/httplib.py", line 756, in send
  File "/usr/lib/python2.7/httplib.py", line 1134, in connect
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
gaierror: [Errno -3] Temporary failure in name resolution

这不是名称解析或DNS问题,因为简单地重新启动应用程序可以解决此问题。
我尝试过Python 2.6和2.7,但情况相同。
我正在运行Linux 2.6.35-30-virtual # 61-Ubuntu SMP Tue Oct 11 18:26:36 UTC 2011 x86_64 GNU / Linux。
有一些帖子提到了这个问题,但没有一个给出了明确的解释或解决方案:
- https://github.com/ggstuart/greenview/issues/4 - 在运行几个小时后,“名称解析中的临时故障”变成永久性问题
2个回答

1
我认为这种情况发生在您处于“打开文件过多”状态时。下次出现此问题时,请尝试查看脚本打开了多少个文件描述符。

最近一直在得到它,整个系统只有394个文件描述符打开(lsof | wc -l)。 - Endophage

0

根本原因是/etc/resolv.conf只在Python启动时读取。要强制刷新解析表,您可以在Linux上运行以下命令:

import ctypes
libc = ctypes.cdll.LoadLibrary('libc.so.6')
res_init = libc.__res_init
res_init()

请勿在多个问题中发布相同的答案。如果相同的信息确实回答了两个问题,则应将一个问题(通常是较新的问题)关闭为另一个问题的副本。您可以通过voting to close it as a duplicate来表示这一点,或者如果您没有足够的声望,则raise a flag来指示它是重复的。否则,请确保您将答案调整到问题,并不要只是在多个地方粘贴相同的答案。 - elixenide

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