Постоянный «Временный сбой в разрешении имен» после нескольких часов работы - PullRequest
17 голосов
/ 02 декабря 2011

После нескольких часов работы в Linux моя программа на Python 2.6, использующая urllib2, httplib и потоки, начинает выдавать эту ошибку для каждого запроса:

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

Если я перезапущу программу, она снова начнет работать. Мое предположение - это некое исчерпание ресурсов, но я не знаю, как это проверить. Как мне диагностировать и устранить проблему?

Ответы [ 2 ]

14 голосов
/ 04 декабря 2011

Это было вызвано тем, что библиотеке не удалось закрыть соединения, что привело к большому количеству соединений, застрявших в состоянии CLOSE_WAIT. В конечном итоге это приводит к ошибке «Временная ошибка разрешения имен» из-за нехватки ресурсов.

0 голосов
/ 20 апреля 2017

Возникла та же проблема, в моем случае это не было исчерпание ресурсов, проблема для меня произошла, когда мой 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, надеюсь, это поможет

...