Постоянный 'временный сбой в разрешении имен' после запуска в течение нескольких часов

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

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

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

2 ответов


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


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

использовать его перед вызовом сокета.подключение, надеюсь, это поможет