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