2011-12-02 66 views
14

爲一些在Linux上,我的Python 2.6的程序時使用的urllib2,httplib的和線程,運行後之後「的名稱解析臨時故障」開始提出這個誤差爲每一個請求:永久運行了幾個小時

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

如果我重新啓動程序,它會重新開始工作。我的猜測是某種資源枯竭,但我不知道如何檢查它。我如何診斷和解決問題?

+2

你早收盤HTTPRequests的(或者你在用什麼)? –

+0

試圖。我只注意到我有大量的CLOSE_WAIT連接必須與問題相關。 – 2371

回答

12

這是由於庫未能關閉連接而導致大量連接停留在CLOSE_WAIT狀態。最終這會導致由於資源耗盡導致的「名稱解析中的臨時失敗」錯誤。

+12

究竟是什麼時候解決了這個問題?我認爲這個錯誤是由httplib庫引起的? – pkaleta

+10

借調,請提供您的調查結果的更多細節,謝謝! –

+8

@ 2371:你是如何發現這是由於資源枯竭? – rajpy

0

遇到同樣的問題,在我的情況下,它沒有資源枯竭,我的問題發生在我的DHCP服務器更改名稱服務器地址時,libc不想彈球並重新加載新的resolv.conf文件,緩存一個,迫使我每次更改時重新啓動腳本。

所有我的Python套接字連接嘗試之後這件事上失敗了,所以我發現this code是解決情況:

import ctypes 
try: 
    libc = ctypes.CDLL('libc.so.6') 
    res_init = getattr(libc, '__res_init') 
    res_init(None) 
except: 
    pass 

調用socket.connect之前使用它,希望這有助於