2011-12-02 3 views
14

Linuxで数時間実行した後、urllib2、httplib、およびスレッドを使用する私のPython 2.6プログラムは、すべての要求に対してこのエラーを発生させます:数時間実行した後の永続的な「名前解決の一時的な失敗」

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

プログラムを再起動すると、再び動作します。私の推測はある種のリソース枯渇だが、私はそれをチェックする方法を知らない。問題を診断して修正するにはどうすればよいですか?

+2

に役立ちます願っていますが、以前のクローズされており、socket.connectを呼び出す前にそれを使用してHTTPRequestsを(またはあなたが使っているもの)? –

+0

。私は、問題に関連しなければならない多数のCLOSE_WAIT接続があることに気付きました。 – 2371

答えて

12

これは、ライブラリが接続を終了できなかったために発生し、CLOSE_WAIT状態で多数の接続が滞っています。最終的に、これにより、リソースが枯渇したために「名前解決で一時的な障害が発生しました」というエラーが発生します。

+12

この問題はいつ正確に解決されましたか?私はエラーがhttplibライブラリによって引き起こされたと仮定しますか? – pkaleta

+10

2番目に、あなたの調査結果の詳細を記入してください、ありがとう! –

+8

@ 2371:リソースが枯渇していることはどうでしたか? – rajpy

0

同じ問題が発生していましたが、私の場合、私のDHCPサーバーがネームサーバーのアドレスを変更したときに問題が発生しましたが、libcはボールを再生して新しいresolv.confファイルをリロードしたくない1つはキャッシュされ、スクリプトが変更されるたびにスクリプトが再起動されます。

すべての私のpythonのソケット接続の試行は、この後に失敗、私は事態解決this codeが見つかりました:

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

これは

関連する問題