Постоянный "Временный сбой при разрешении имени" после запуска в течение нескольких часов
После запуска в течение нескольких часов в Linux моя программа Python 2.6, использующая urllib2, httplib и потоки, начинает поднимать эту ошибку для каждого запроса:
<class 'urllib2.URLError'> URLError(gaierror(-3, 'Temporary failure in name resolution'),)
Если я перезапущу программу, он снова начнет работать. Мое предположение - это некоторое истощение ресурсов, но я не знаю, как это проверить. Как мне диагностировать и устранить проблему?
Ответы
Ответ 1
Это было вызвано сбоем библиотеки для закрытия соединений, что привело к большому количеству подключений, застрявших в состоянии CLOSE_WAIT. В конечном итоге это приводит к ошибке "Временная ошибка при разрешении имен" из-за исчерпания ресурсов.
Ответ 2
Возникла такая же проблема, в моем случае это было не исчерпывание ресурсов, проблема для меня произошла, когда мой сервер dhcp изменил адрес сервера имен, libc не хотел играть в мяч и перезагружать новый файл resolv.conf, сохраняя кешированный один и заставляя меня перезапускать script каждый раз, когда он менялся.
Все мои попытки подключения к сокету python терпят неудачу после этого, поэтому я нашел этот код, который решил ситуацию:
import ctypes
try:
libc = ctypes.CDLL('libc.so.6')
res_init = getattr(libc, '__res_init')
res_init(None)
except:
pass
Используйте его перед вызовом socket.connect, надейтесь, что это поможет